Order by 不适用于 LINQ 中的 Concat()

2024-01-03

使用 VB.net 和以下 LINQ 语句。我怀疑“排序依据”不适用于Concat()。我想列出用户当前拥有的项目,然后按升序列出更多可用项目。因此,首先我从数据库中选择当前项目,然后按顺序选择下一个可用项目。 LINQ 忽略 order by 语句并按 PK(即 itemID)排序,我在执行该语句后立即检查了列表。当我分解该语句并分别执行它们时,它们会按预期工作。任何想法、建议或意见。 谢谢, 下午

(From items In myDatabase.ItemAssignments _
 Where items.BuildingID = buildingID _
 And items.ResidentID = ResidentID _
 Select items).Concat(From moreitems In myDatabase.ItemAssignments _
                      Where moreitems.occupied = 0 _
                      And moreitems.BuildingID = buildingID _
                      Order by moreitems.Floor, moreitems.ItemNumber _
                      Select moreitems)

The Concat当涉及到 LINQ to SQL 时,确实会忽略 order by 子句。如果您使用的是,可以从生成的 SQL 中验证这一点LINQPad http://linqpad.net/或设置DataContext.Log财产 http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.log.aspx.

解决这个问题的一种方法是通过匿名类型引入虚拟值来帮助排序。为了清楚起见,我将下面的查询分开,尽管使用您开始使用的查询语法可以使用相同的方法,直到您需要指定顺序为止。

Dim firstQuery = From items In myDatabase.ItemAssignments _
                 Where items.BuildingID = buildingID _
                 And items.ResidentID = ResidentID _
                 Select New With { .Row = items, .Order = 1 }
Dim secondQuery = From moreitems In myDatabase.ItemAssignments _
                  Where moreitems.occupied = 0 _
                  And moreitems.BuildingID = buildingID _
                  Select New With { .Row = moreitems, .Order = 2 }

Dim query = firstQuery.Concat(secondQuery) _
                      .OrderBy(Function(o) o.Order) _
                      .ThenBy(Function(o) o.Row.Floor) _
                      .ThenBy(Function(o) o.Row.ItemNumber) _
                      .Select(Function(o) o.Row)

另一个不太理想的选择是调用AsEnumerable method http://msdn.microsoft.com/en-us/library/bb335435.aspx在其中一个查询上,这将从数据库中提取结果。根据涉及的项目数量以及是否需要进一步过滤,这可能会对性能产生不利影响。

要使用此方法,请更改原始查询的第一部分以使用:

From items In myDatabase.ItemAssignments.AsEnumerable() ...

然后,第二部分的排序将按预期工作,生成的 SQL 将反映同样的情况。

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

Order by 不适用于 LINQ 中的 Concat() 的相关文章

  • .Net 6 控制台应用程序:WebApplication.CreateBuilder 与 Host.CreateDefaultBuilder

    我正在研究 NET 6 并希望构建一个简单的控制台应用程序 并进行一些依赖项注入 据我所知 为了使启动 现在只是程序 文件更具可读性 已经做了很多工作 让我有点困惑的是 所有改进似乎都是针对 API 项目中使用的 WebApplicatio
  • WCF获取证书编码值

    我在 WCF 服务中使用证书 因此在 web Config 中有一个编码值
  • .net 中的计时器合并

    Windows 7 引入了计时器合并 提高了能源效率 哪些托管 API 公开了计时器容差 似乎利用此功能的唯一方法是 p invoke设置等待定时器 http msdn microsoft com en us library windows
  • 如何使用 LINQ 获取唯一 id 列的最大值

    如何使用 LINQ 以最简单的方式编写此代码 SELECT MAX Game id AS MaxValue FROM Dim Game Try context Dim Games Max g gt g Game id
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • VB.NET会自动生成ComClass属性和guid吗?

    我运行过一些 VB NET 代码 这些代码显式创建三个 GUID 常量并在类的 ComClass 属性中使用它们 我过去只是通过检查项目选项中的 使 COM 可见 和 注册 COM 互操作 选项来编写 COM 感知类 这个显式代码是否根本没
  • 使对象在运行时不可变 [C#]

    有什么方法 我希望利用反射 可以使实例化对象不可变及其所有公共财产 我有一个来自其他人的代码库 没有可用源 的类 我需要使用它 并且我基本上希望在实例化该类后 如果任何地方的任何代码段尝试调用该类中的公共设置器 则抛出异常 注意 我不想在类
  • 性能计数器损坏?

    性能计数器是邪恶的 不要使用它们 if PerformanceCounterCategory Exists ILoveYou is true PerformanceCounterCategory Delete ILoveYou throws
  • 如何按顺序而不是并行等待 C# 任务?

    我有一组异步测试 它们在外部硬件上运行 我可以按顺序运行它们 但因为所有这些测试都有副作用 所以我希望能够重新排列它们并一遍又一遍地运行它们 当我将它们放入列表中并尝试等待每个之后 它们全部并行运行 而不是 1 个 1 个运行 我希望能够打
  • 需要带有 DateTime 转换的 lambda 表达式 OrderBy

    我正在尝试创建一个 lambda 表达式 Linq C 3 5 它可以对数据类型为 String 的值执行 OrderBy 但实际上包含可解析的 DateTime 例如 典型值可以是 5 12 2009 1 14 2008 等 下面的 Or
  • 使用自定义 TTF 字体进行 DrawString 图像渲染

    我在服务器端使用 GDI 创建图像 并将其传输到用户的浏览器 没有一个标准字体符合我的要求 因此我想加载 TrueType 字体并使用此字体将字符串绘制到图形对象 using var backgroundImage new Bitmap b
  • 在 C++/CLI 中实现 IEnumerable

    我在实施时遇到问题IEnumerable
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 计算文本框中换行的行数

    我在文本框中有一行文本 并且换行为多行 如何计算文本框中换行的行数 你可以使用String Split int lineCount txt Text Split new n r StringSplitOptions None Length
  • 如何在 XAML/WPF 中存储和检索多个形状?

    使用 XAML WPF 做一些简单的事情似乎遇到了很多问题 我已经使用矩形和椭圆形等形状创建了一些基于 XAML 的图像来创建我需要应用程序的其他部分使用的图标 但我不能似乎找到了如何做到这一点 我似乎能够在资源字典中存储画布 但无法在任何
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2

随机推荐