我有两个名为“类别”和“产品”的实体,具有 1:n 关系。
我想要一个带有子项的类别,子项是有序的。
这是我的链接:
_db.Categories.Where(c => c.CategoryID == catID)
.Include(c => c.Products.OrderBy(p => p.ProductID))
.SingleOrDefault();
由于 orderby 的原因,此查询会强制执行,但会出现以下异常。
包含路径表达式必须引用
到定义的导航属性
方式。使用点路径
参考导航属性和
用于集合的 Select 运算符
导航属性。参数名称:
小路
急切加载的数据无法排序或过滤。这是 linq-to-entities 的限制,在数据库中排序关系的唯一方法是使用投影:
var data = _db.Polls
.Where(c => c.CategoryID == pollID)
.Select(c => new
{
Pool = c,
Products = c.Products.OrderBy(p => p.ProductID)
})
.SingelOrDefault();
您可以投影到匿名或自定义类型,但不能投影到映射类型(例如Poll
).
另一种方法是将其分为两个查询并使用显式加载:
var poll = _db.Polls.SingleOrDefault(c => c.CategoryID == pollID);
_db.Entry(poll).Collection(c => c.Products)
.Query()
.OrderBy(p =>.ProductID)
.Load();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)