我需要在数据库服务器端将一个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()
调用,但我感兴趣的是在数据库级别完成此操作。
答案 0 :(得分:4)
您可以将它们连接在一起,然后按照分隔订单组的列进行排序。所以例如在SQL Query中你会这样做:
ORDER BY XOrderStatus, Id
然后按ID排序,但两个OrderStatuses分组。
我不知道linq to sql(对不起!),但谷歌提到的这可能很有用:
.Orderby(o => o.XOrderStatus).ThenBy(o => o.Id)
原始来源:
答案 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();