c# – 通过Linq Include订购
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 通过Linq Include订购,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1818字,纯文字阅读大概需要3分钟。
内容图文
![c# – 通过Linq Include订购](/upload/InfoBanner/zyjiaocheng/785/c4d2a2ac260a46eb81b8c5f39d899831.jpg)
我与两个实体有一个多关系:
Order:
int OrderId
string OrderNumber
...
OrderItem:
int ItemId
int sequence
...
Product:
int ProductId
string ProductName
ProductType:
int ProductTypeid
string Title
一个订单具有多个OrderItem,每个OrderItem都有一个产品,每个产品都有一个ProductType.
我想写一个Linq,它返回所有订单及其商品,Product,ProductType和商品按顺序字段排序.如何编写查询,如下面的查询?
在Order by with Linq的帮助下我写了这个查询:
var myOrder= db.Orders.Include("OrderItems")
.Where(x => x.OrderId == 3)
.Include("OrderItems.Product")
.Include("OrderItems.Product.ProductType")
.Select(o => new {
order = o,
orderItems = o.OrderItems.OrderBy(i => i.sequence)
}).FirstOrDefault();
但是当它返回结果时,它不包含Product和ProductType数据.
我的错在哪里?
解决方法:
您需要先将所有调用放入Include().这应该工作:
var myOrder= db.Orders.Include("OrderItems")
.Include("OrderItems.Product")
.Include("OrderItems.Product.ProductType")
.Where(x => x.OrderId == 3)
.Select(o => new {
order = o,
orderItems = o.OrderItems.OrderBy(i => i.sequence)
}).FirstOrDefault();
此外,当你有.Include(“OrderItems.Product.ProductType”)时,你不需要.Include(“OrderItems”)和.Include(“OrderItems.Product”),因为它将包含OrderItems及其产品的方式包括产品类型.它必须这样做,否则你将无法在代码中导航到它们 – 它会将它们附加到什么位置?
在这种情况下,看起来好像这可以解释它:http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework
您可以在不使用包含的情况下出行:
var query = db.Orders
.Where(x => x.OrderId == 3)
.Select(o => new {
order = o,
orderItems = o.OrderItems.OrderBy(i => i.sequence),
products = o.OrderItems.Select(i => new { i, i.Product, i.Product.ProductType })
});
您投射到输出选择中的任何内容都将自动加载.像这样的急切加载在某些方面实际上是可取的,因为你只是实现你需要的东西,而不是完整的对象图. (虽然在这种情况下,我们的实现与包含的内容相同.)
内容总结
以上是互联网集市为您收集整理的c# – 通过Linq Include订购全部内容,希望文章能够帮你解决c# – 通过Linq Include订购所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。