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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...