2014-01-07 61 views
-1

我需要將一個LINQ To SQL查詢的結果追加到數據庫服務器端的另一個上,而無需重新排序行。合併2 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,UnionDistinct方法完全消除OrderByDescending調用(按設計)。

我知道這可能與兩個ToArray()調用有關,但我有興趣在數據庫級別完成此操作。

回答

4

您可以將它們連接在一起,然後按分隔訂單組的列排序。所以例如在一個SQL查詢,你會做到這一點:

ORDER BY XOrderStatus, Id

,並會通過ID但分組兩個OrderStatuses訂購。

我不知道的LINQ to SQL(對不起!),但快速谷歌提起這可能工作:

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

原文出處:

Multiple "order by" in LINQ

+1

好,很好的答案。它提供了一個想法。我使用基於「分組」方法的解決方案更新了我的問題。 – Denis

+0

只需使用一個常量('select new {OrderPrefix = 1,OtherFields ...}')。 – usr

+0

@usr,沒錯。 – Denis

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