C# 合并2个LINQ到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 =>

我需要在数据库服务器端将一个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 => 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…}
)。