gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:55:49 25 4
gpt4 key购买 nike

使用 VB.net 和以下 LINQ 语句。我怀疑“订购者”不适用于 Concat() .我想列出用户拥有的当前项目,然后按升序列出更多可用项目。所以首先我从数据库中选择当前项目,然后按顺序选择下一个可用项目。 LINQ 忽略了按语句排序并按 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)

最佳答案

Concat当涉及到 LINQ to SQL 时,确实忽略了 order by 子句。如果您使用 LINQPad,这可以从生成的 SQL 中验证。或设置 DataContext.Log property .

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

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在其中一个查询上,这将从数据库中提取结果。根据所涉及的项目数量以及是否需要进一步过滤,这可能会对性能产生不利影响。

要使用这种方法,请更改原始查询的第一部分以使用:
From items In myDatabase.ItemAssignments.AsEnumerable() ...

然后,您的第二部分的排序将按预期工作,生成的 SQL 将反射(reflect)出来。

关于.net - Order by 不适用于 LINQ 中的 Concat(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com