我只需要过滤类别中的可见产品,但它无效。
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
答案 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;
未测试......