0

我正在尝试使用 LINQ 替代文字
基于此数据库模型查询以下实体数据模型 替代文字

我希望能够根据 ProductFacets.FacetTypeId 提取产品列表。

通常,我会使用连接,这不是问题,但我不太明白如何查询实体数据模型下的多对多表。

这是一个示例 sql 查询:

select p.Name, pf.FacetTypeId from Products p
inner join ProductFacets pf on p.ProductId = pf.ProductId   
where pf.FacetTypeId in(8, 12)
4

2 回答 2

1

假设 EF 4:

var facetIds = new [] { 8, 12 };
var q = from p in Context.Products
        where p.FacetTypes.Any(f => facetIds.Contains(f.FacetTypeId))
        select p;
于 2010-07-21T13:36:30.447 回答
1

在 EF 中(假设映射正确完成),几乎不使用连接;而是使用导航属性。

您的原始 SQL 返回一个包含重复名称条目的元组。使用 LINQ,通常更容易将查询“塑造”成非元组结果。

下面应该和 SQL 一样,只是不会返回带有重复 Names 的 (Name, FacetTypeId) 对,而是返回一个具有 Name 和 FacetTypeIds 序列的类型:

var facetIds = new [] { 8, 12 };
var result = from p in db.Products
             select new
             {
                p.Name,
                FacetTypeIds = from pf in p.FacetTypes
                               where pf.FacetTypeId == 8 || pf.FacetTypeId == 12
                               select pf.FacetTypeId,
             };
于 2010-07-21T13:39:29.813 回答