.net – Order by在LINQ中与Concat()不起作用

前端之家收集整理的这篇文章主要介绍了.net – Order by在LINQ中与Concat()不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用VB.net和以下LINQ语句.我怀疑“Order by”不适用于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)

解决方法

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

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

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将反映出来.

猜你在找的MsSQL相关文章