合并2个LINQ To SQL查询的结果并保持其顺序

时间:2014-01-07 17:15:20

标签: c# linq-to-sql concatenation

我需要在数据库服务器端将一个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()方法? ConcatUnionDistinct方法完全取消OrderByDescending调用(按设计)。

我知道可以使用两个ToArray()调用,但我感兴趣的是在数据库级别完成此操作。

2 个答案:

答案 0 :(得分:4)

您可以将它们连接在一起,然后按照分隔订单组的列进行排序。所以例如在SQL Query中你会这样做:

ORDER BY XOrderStatus, Id

然后按ID排序,但两个OrderStatuses分组。

我不知道linq to sql(对不起!),但谷歌提到的这可能很有用:

.Orderby(o => o.XOrderStatus).ThenBy(o => o.Id)

原始来源:

Multiple "order by" in LINQ

答案 1 :(得分:0)

我找到了更好的解决方案:

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();