Lambda表达式过滤包含与Entity Framework相关的数据

时间:2012-07-04 19:24:27

标签: c# entity-framework lambda filtering

我只需要过滤类别中的可见产品,但它无效。

Category category = db.Categories
            .Include(c => c.Products.Where(p => p.IsVisible))
            .First(c => c.CategoryID == id);

错误:

  

Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。

更新

 var result = (from c in db.Categories
                             where c.CategoryID == id
                             select new
                             {
                                 CategoryID = c.CategoryID,
                                 Description = c.Description,
                                 Products = (from p in db.Products
                                             where p.IsVisible
                                             && p.CategoryID == c.CategoryID
                                             orderby p.DateSent descending
                                             select p)
                             }).FirstOrDefault();

但现在我需要将anonymousType转换为Category

2 个答案:

答案 0 :(得分:1)

如果您愿意,您的查询没有意义:

  

来自某个类别的可见产品

如果您真的想要可见的产品,请尝试以下方法:

var visibleProducts = db.Categories
                        .Where(c => c.CategoryID == id)
                        .Select(c => c.Products.Where(p => p.IsVisible));

注意:未经测试

答案 1 :(得分:0)

可能是这样的:

var category = db.Products.Where(p=>p.IsVisible && p.CategoryID == id).Include("Category").ToList().Select( p=> p.Category).Distinct();

由于ToList,它可能并不理想......但我现在看不到别的办法了。

也许您可以将Distinct更改为FirstOrDefault()......

var category = db.Products.Where(p=>p.IsVisible && p.CategoryID == id).Include("Category").ToList().FirstOrDefault().Category;

未测试......