C# Lambda表达式过滤包含实体框架的相关数据

C# Lambda表达式过滤包含实体框架的相关数据,c#,entity-framework,lambda,filtering,C#,Entity Framework,Lambda,Filtering,我只需要从一个类别中筛选可见的产品,但它不起作用 Category category = db.Categories .Include(c => c.Products.Where(p => p.IsVisible)) .First(c => c.CategoryID == id); 错误: 包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择运算符作为集合导航属性 更新 var result = (

我只需要从一个类别中筛选可见的产品,但它不起作用

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

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

更新

 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();

但是现在我需要将匿名类型转换为类别

如果您想:

类别中的可见产品

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

var visibleProducts = db.Categories
                        .Where(c => c.CategoryID == id)
                        .Select(c => c.Products.Where(p => p.IsVisible));
注意:未经测试

可能类似于:

var category = db.Products.Where(p=>p.IsVisible && p.CategoryID == id).Include("Category").ToList().Select( p=> p.Category).Distinct();
这可能不是理想的,因为托利斯特。。。但我现在看不到别的办法

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


也未测试…

我将进行测试,但我需要类别数据加上可见产品列表。如果您已经拥有类别的id,您可以进行两次查询。第一个查询获取类别,第二个查询从类别中获取可见的产品。我知道我可以使用2个查询,但由于性能原因,最好只使用1个。不会有性能问题,它已经必须执行这2个查询了。还不如分别存储这两种方法的结果。
var category = db.Products.Where(p=>p.IsVisible && p.CategoryID == id).Include("Category").ToList().FirstOrDefault().Category;