C# 合并2个LINQ到SQL查询的结果并保持其顺序
我需要在数据库服务器端将一个LINQ to SQL查询的结果附加到另一个LINQ to SQL查询的结果,而无需重新排序行 我首先需要所有出错的订单,然后是待处理的订单C# 合并2个LINQ到SQL查询的结果并保持其顺序,c#,linq-to-sql,concatenation,C#,Linq To Sql,Concatenation,我需要在数据库服务器端将一个LINQ to SQL查询的结果附加到另一个LINQ to SQL查询的结果,而无需重新排序行 我首先需要所有出错的订单,然后是待处理的订单 var error = database.Orders. Where(o => o.Status == XOrderStatus.Error). OrderByDescending(o => o.Id); var pending = database.Orders. Where(o =>
var error = database.Orders.
Where(o => o.Status == XOrderStatus.Error).
OrderByDescending(o => o.Id);
var pending = database.Orders.
Where(o => o.Status == XOrderStatus.PendingReview).
OrderByDescending(o => o.Id);
var r = error.OrderedUnion(pending);
如何实现OrderedUnion()
方法Concat
、Union
和Distinct
方法完全消除了OrderByDescending
调用(通过设计)
我知道可以使用两个
ToArray()
调用,但我对在数据库级别执行此操作感兴趣。您可以将它们连接在一起,然后通过一列分隔订单组进行排序。例如,在SQL查询中,您可以执行以下操作:
XOrderStatus的订单,Id
这将按ID排序,但将两个OrderStatus分组
我不知道linq到sql(对不起!),但谷歌快速提到这可能会奏效:
.Orderby(o=>o.XOrderStatus)。然后是by(o=>o.Id)
原始资料来源:
我找到了更好的解决方案:
var all = database.Orders.
Where(o =>
o.Status == XOrderStatus.Error ||
o.Status == XOrderStatus.PendingReview).
OrderBy(o => o.Status == XOrderStatus.Error ? 0 : 1).
ThenByDescending(o => o.Id).
ToArray();
好的,回答得好。它给出了一个想法。我使用基于“分组”方法的解决方案更新了我的问题。只需使用常量(
select new{orderprix=1,OtherFields…}
)。