Gho*_*ngi 2 linq linq-to-entities entity-framework eager-loading ef-code-first
我有两个名为Category和Product的实体,其中1:n关系.
我希望得到一个带有孩子的分类.
这是我的linq:
_db.Categories.Where(c => c.CategoryID == catID)
.Include(c => c.Products.OrderBy(p => p.ProductID))
.SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
由于orderby,此查询使用以下异常强制执行.
Include路径表达式必须引用在类型上定义的导航属性.使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性.参数名称:路径
无法订购或过滤预先加载的数据.这是linq到实体的限制,如何在数据库中订购关系的唯一方法是使用投影:
var data = _db.Polls
.Where(c => c.CategoryID == pollID)
.Select(c => new
{
Pool = c,
Products = c.Products.OrderBy(p => p.ProductID)
})
.SingelOrDefault();
Run Code Online (Sandbox Code Playgroud)
您可以投影到匿名或自定义类型,但不能投影到映射类型(例如Poll).
另一种方法是将其分为两个查询并使用显式加载:
var poll = _db.Polls.SingleOrDefault(c => c.CategoryID == pollID);
_db.Entry(poll).Collection(c => c.Products)
.Query()
.OrderBy(p =>.ProductID)
.Load();
Run Code Online (Sandbox Code Playgroud)