EF Code First 预加载和 OrderBy 问题

2024-03-03

我有两个名为“类别”和“产品”的实体,具有 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(使用前将#替换为@)

EF Code First 预加载和 OrderBy 问题 的相关文章

随机推荐