我有一個名稱,日期,類別爲參數的集合。我想根據動態更改的三個輸入順序對列表進行排序。 例如:在一種情況下,我必須分別對訂單日期,名稱,類別進行排序。 在另一種情況下,訂單是名稱,日期和類別。所以我可以擁有所有的排列和組合。有人可以用一種通用的方式來幫助我實現它。LINQ動態查詢查詢 - 多個字段
回答
我也在這裏找到他可能喜歡的東西:http://www.codeproject.com/Articles/27834/Generic-List-Sort-Function < - 希望它有幫助,它可以根據任何輸入屬性進行排序。該物業是通過反思。
該方法在List中實現,而不是在IQueryable中實現。所以只能在.ToList()之後使用,換句話說,在數據加載之後才能使用。 –
LINQ已經允許您通過排序依據後加入Queryable.ThenBy,QueryableThenByDescending,Enumerable.ThenBy或Enumerable.ThenByDescending功能使用多個字段進行排序。
檢查Multiple 「order by」 in LINQ對於類似的問題和討論。如果您需要Enumerable未提供的罕見方法,則可以將Enumerable轉換爲Queryable,只需在其上調用AsQueryable即可。
我知道LinQ有orderby和thenby函數。但是這裏的問題是因爲場的順序是動態的,我如何通過場並相應地安排它們? – user1687824
您不需要*傳遞*任何東西,只需使用適當的lambda調用ThenBy,具體取決於您要訂購的字段。即使是一個簡單的switch語句也可以。或者,您可以使用要訂購的lambda表創建數組/列表,然後逐個應用它們。拉姆達只不過是另一種類型的變量 –
我不確定你是否理解了我,或者我沒有明白它......你可以給我一些示例代碼嗎?根據你的解決方案,我需要給予orderby。其餘的呢?那麼如何動態地實現呢? – user1687824
下面是一個例子
// 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多個 「以便通過」]的
這不是按一組字段排序,而是按最後一個OrderBy字段計數。 –
- 1. LINQ查詢字段<T>動態?
- 2. 動態LINQ查詢
- 3. 動態LINQ查詢
- 4. 多態LINQ查詢
- 5. 動態查詢使用Linq To SQL根據多個字段
- 6. 動態LINQ查詢
- 7. Linq查詢動態
- 8. 動態LINQ查詢
- 9. 動態LINQ查詢
- 10. LINQ動態查詢
- 11. 動態linq查詢
- 12. 動態LINQ查詢EF C#
- 13. 動態LINQ查詢ExpandoObject?
- 14. Linq動態查詢與組
- 15. 複雜動態LINQ查詢
- 16. LINQ中的動態查詢
- 17. 多個Linq查詢||
- 18. Linq 2 Sql動態查詢
- 19. 構建LINQ查詢動態
- 20. LINQ動態查詢庫
- 21. 動態Linq查詢幫助?
- 22. 動態創建linq查詢
- 23. 創建動態LINQ查詢
- 24. 在SharePoint動態LINQ查詢
- 25. 查詢使用動態LINQ
- 26. 動態Linq查詢問題
- 27. 動態查詢動態子查詢
- 28. 查詢字段與多行SQL查詢
- 29. Linq查詢階段
- 30. 建立一個動態的LINQ查詢
可能重複(http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) –
http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet – JohnLBevan
LINQ使用ThenBy函數提供了這種開箱即用的功能,不需要使用動態Linq或任何東西 –