0

我只需要过滤某个类别中的可见产品,但它不起作用。

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

错误:

包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 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();

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

4

2 回答 2

1

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

某个类别的可见产品

如果你真的想要可见的产品,试试这个:

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

注:未经测试

于 2012-07-04T19:34:42.947 回答
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;

也没有测试...

于 2012-07-04T20:26:29.880 回答