使用 Linq + Include 排序

2024-03-13

我与两个实体有一对多关系:

Order:
int OrderId 
string OrderNumber
...

OrderItem:
int ItemId
int sequence
...

Product:
int ProductId
string ProductName

ProductType:
int ProductTypeid
string Title

One Order拥有多个OrderItems,以及每个OrderItem有一个Product和每个Product有一个ProductType.

我想写一个 Linq 来返回所有订单及其items,Product,ProductType和项目按序列字段排序。如何编写查询,例如以下查询?

在帮助下使用 Linq 排序 https://stackoverflow.com/questions/14474320/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") and .Include("OrderItems.Product"),因为它将在包含产品类型的过程中包含 OrderItems 及其产品。它必须这样做,否则您将无法在代码中导航到它们 - 它将它们附加到什么?

在这种情况下,看起来这可以解释它:http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework

您可以在不使用 include 的情况下绕过:

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 })
});

您投影到输出选择中的任何内容都将自动预先加载。像这样的预加载实际上在某些方面更可取,因为您只是具体化了您需要的内容,而不是完整的对象图。 (尽管在本例中我们实现的内容与包含内容相同。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Linq + Include 排序 的相关文章

随机推荐

  • PHP 与 MySQL 8.0+ 错误:服务器请求客户端未知的身份验证方法[重复]

    这个问题在这里已经有答案了 我在 PHP 7 0 上运行 MySQL 版本 8 当我尝试从 PHP 连接到数据库时 出现以下错误 连接错误 SQLSTATE HY000 2054 服务器请求客户端未知的身份验证方法 PHP 可能会显示此错误
  • 理解字符串的真实性

    我知道Python内置类型有一个 真实性 值 空字符串被认为是False 同时考虑任何非空字符串True 这是有道理的 我可以使用内置函数检查这一点bool gt gt gt bool False gt gt gt bool dog Tru
  • R grepl:快速将多个字符串与多个子字符串匹配,返回所有匹配项

    我在 R 中有相当大的字符串集 set seed 42 strings lt sapply 1 250000 function x sample 2 20 1 prob c 0 001 0 006 0 021 0 043 0 075 0 1
  • 如何在 SQL Server 中一次更改多个列

    我需要ALTER表中几列的数据类型 对于单列 以下工作正常 ALTER TABLE tblcommodityOHLC ALTER COLUMN CC CommodityContractID NUMERIC 18 0 但是如何更改一个语句中的
  • 使用 JavaScript 在画布中操作图像亮度

    我想更改图像的亮度 我有一个大项目 下面是一个最小的可重现示例 我添加了这一行来检测对象中的 ID 并将亮度分配给图像属性 for let j 0 j lt imageOverlay length j if id imageOverlay
  • Rails simple_form label_html

    我想覆盖一种表单上的输入与其标签之间的边距 可以通过 label html gt 来完成吗 github 上的示例显示了 class gt special 被传递 我需要在 css 文件中设置一些内容吗 如果是这样 我该怎么做 也就是说 我
  • 如何从仅一个月前的Firestore中获取文档

    我正在执行查询以仅获取 1 个月前的文档 我存储文档本身的创建时间 timestamp 9 Apr 2020 10 03 43 AM 现在 在我的查询中 我想获取当月的所有文档 但我不想使用客户端的 currentDate 因此无法更改 但
  • C# 是否支持绑定方法或方法闭包(特殊闭包允许 this 始终指向实例)

    Adobe有非常明确的解释here http help adobe com en US ActionScript 3 0 ProgrammingAS3 WS5b3ccc516d4fbf351e63e3d118a9b90204 7f30 ht
  • JS DOM createElements 和appendChild 不起作用

    我正在尝试创建一个包含一些学生信息的网站 因此 我需要创建动态配置文件卡并将它们附加到正文中 但 DOM 总是让我着迷 function student src name this src src this name name var st
  • 具有两种纯色的矩形形状

    我想创建一个具有两种纯色 水平 的矩形形状以实现如下所示 我听说过layer list 我虽然可以用它来包含两个不同颜色的矩形 但它似乎只能垂直放置形状 有没有办法使用 lalyer list 来实现这一点 或者我应该使用完全不同的东西 我
  • iPad 标题栏。导航栏还是工具栏?

    我看到很多 iPad 应用程序都有很酷的标题栏 这些似乎是导航栏和工具栏的组合 它们通常有一个后退按钮和一个标题以及其他按钮 导航栏仅支持左侧项目 右侧项目和标题视图 而且工具栏并不真正支持后退按钮或标题 那么 如何在 UINavigati
  • java servlet 中出现令人惊讶的结果

    我在 java servlet 中得到了令人惊讶的结果 我将输入参数 日期 从 jsp 传递到 servlet 如下所示
  • 由于文件路径中有特殊字符,OpenCv imwrite 不起作用

    当文件路径具有特殊字符 例如 时 我无法保存图像 这是来自 Python 3 shell 的测试 gt gt gt cv2 imwrite gel test jpg frame True gt gt gt cv2 imwrite gel t
  • 如何在 C 中打印“off_t”? [复制]

    这个问题在这里已经有答案了 可能的重复 我应该如何打印像off t和size t这样的类型 https stackoverflow com questions 586928 how should i print types like off
  • 如何告诉 git 显示我在上次提交中所做的更改的差异? [复制]

    这个问题在这里已经有答案了 With git 如何查看上次提交的更改 我的意思是我想看到我的最后一次提交和之前的提交之间的差异 我知道我可以在 Github 浏览器上看到它 但我想在终端上的本地提交历史记录中看到它 我知道我可以在提交之间进
  • 无法为 android 中的微调器设置 OnItemClickListener

    在定制的RecyclerView Adapter
  • 如何生成随机概率分布 julia

    我在字典中有一个键列表 我想为每个项目分配一个 0 到 1 之间的数字 使分配的数字总和为 1 如何做到这一点 我尝试使用 rand 进行一些操作 但没有成功 有什么建议么 更数学的答案是使用狄利克雷分布 https en wikipedi
  • 类组件的 useEffect 替代品

    我刚刚了解到在功能组件中我可以使用useEffect留意任何副作用 例如 使用时localStorage 这确保我的状态与效果挂钩 我想在我的基于类的组件中具有类似的功能localStorage 我怎样才能确保我的状态在发生任何变化时立即更
  • 从 Java 应用程序即时打开 PDF 文件

    有没有办法让代码以独立于平台的方式在Java应用程序中打开PDF文件 我的意思是在 Windows 中使用批处理文件可以做到这一点 有没有其他方法可以使用独立于平台的代码来动态打开 PDF 文件 I d try Desktop open F
  • 使用 Linq + Include 排序

    我与两个实体有一对多关系 Order int OrderId string OrderNumber OrderItem int ItemId int sequence Product int ProductId string Product