.net – Order by在LINQ中与Concat()不起作用
发布时间:2020-12-12 16:33:38 所属栏目:MsSql教程 来源:网络整理
导读:使用VB.net和以下LINQ语句.我怀疑“Order by”不适用于Concat().我想列出用户拥有的当前项目,然后按顺序列出更多可用项目.首先我从数据库中选择当前项目,然后按顺序选择下一个可用项目. LINQ忽略通过语句的顺序和通过PK排序(这是itemID)我在执行语句之后立即
使用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) 另一个不太可取的选择是在其中一个查询中调用 要使用此方法,可以更改原始查询的第一部分以使用: From items In myDatabase.ItemAssignments.AsEnumerable() ... 第二部分的顺序将按照预期的方式工作,生成的SQL将反映出来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |