2013-09-24 32 views
0

我有一個名稱,日期,類別爲參數的集合。我想根據動態更改的三個輸入順序對列表進行排序。 例如:在一種情況下,我必須分別對訂單日期,名稱,類別進行排序。 在另一種情況下,訂單是名稱,日期和類別。所以我可以擁有所有的排列和組合。有人可以用一種通用的方式來幫助我實現它。LINQ動態查詢查詢 - 多個字段

+0

可能重複(http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) –

+1

http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet – JohnLBevan

+0

LINQ使用ThenBy函數提供了這種開箱即用的功能,不需要使用動態Linq或任何東西 –

回答

0

我也在這裏找到他可能喜歡的東西:http://www.codeproject.com/Articles/27834/Generic-List-Sort-Function < - 希望它有幫助,它可以根據任何輸入屬性進行排序。該物業是通過反思。

+0

該方法在List中實現,而不是在IQueryable中實現。所以只能在.ToList()之後使用,換句話說,在數據加載之後才能使用。 –

1

LINQ已經允許您通過排序依據後加入Queryable.ThenByQueryableThenByDescendingEnumerable.ThenByEnumerable.ThenByDescending功能使用多個字段進行排序。

檢查Multiple 「order by」 in LINQ對於類似的問題和討論。如果您需要Enumerable未提供的罕見方法,則可以將Enumerable轉換爲Queryable,只需在其上調用AsQueryable即可。

+0

我知道LinQ有orderby和thenby函數。但是這裏的問題是因爲場的順序是動態的,我如何通過場並相應地安排它們? – user1687824

+0

您不需要*傳遞*任何東西,只需使用適當的lambda調用ThenBy,具體取決於您要訂購的字段。即使是一個簡單的switch語句也可以。或者,您可以使用要訂購的lambda表創建數組/列表,然後逐個應用它們。拉姆達只不過是另一種類型的變量 –

+0

我不確定你是否理解了我,或者我沒有明白它......你可以給我一些示例代碼嗎?根據你的解決方案,我需要給予orderby。其餘的呢?那麼如何動態地實現呢? – user1687824

1

下面是一個例子

// Just to get IOrderedEnumerable from the collection 
// And set the default order 
var orderedItems = context.Items.OrderBy(i => i.Name); 

var orderByString = txtOrderBy.Text.ToLower(); 
switch(orderByString) 
{ 
    case "category": 
     orderedItems = orderedItems.OrderBy(i => i.Category); 
     break; 
    case "date": 
     orderedItems = orderedItems.OrderBy(i => i.Date); 
     break; 
    default: 
     break; 
} 
[在LINQ多個 「以便通過」]的
+0

這不是按一組字段排序,而是按最後一個OrderBy字段計數。 –