2013-11-15 86 views
0

需要一些幫助,這裏有一些Linq查詢。按字符串自定義過濾器排序列表

我想把自定義順序中的一個列表放在一起,我可以爲兩個參數進行排序,但第三個參數似乎要難得多。

我目前所面對的是什麼:

return this.currentDocuments.OrderByDescending(x => x.Created).ThenBy(x => x.Description).toList(); 

現在我需要添加這是由一個XML字段中的字符串設定第三個參數。我有一個字段只是一串字母,需要使用字符串的最後兩個字母來定義順序。

任何人都可以啓發我如何做到這一點?這是可以用Linq完成的事情,還是我需要編寫一個單獨的方法來做到這一點?

此外,有9個不同的選項可用於輸出字符串的最後兩位數字,因此我需要找到使用所有選項的最簡單方法。

任何意見/指針/幫助讚賞和道歉,如果這是一個龐大的問題..但我們都需要學習!

謝謝。

+1

你應該看看動態linq –

+0

你的問題有點不清楚。 「XML字段中的字符串」是什麼意思? XML字段在哪裏? –

+0

對不起,該字段位於標籤內的XML文件中。希望更有意義。 – user2039317

回答

0

正如延斯克洛斯特建議,你應該看看動態Linq的這個問題。

看看這個帖子的例子和代碼。一個限制是你必須使用IQueryable<T>而不是IEnumerable<T>,但這可能不成問題。

您的代碼將然後是這個樣子:

var sortingCodeToSortField = new Dictionary<string,string> 
    { {"ei", "EmployeeId"}, {"na", "Name"}, {"ag", "Age" } }; 

string sortCode = GetSortCodeFromXml(inputXml); 
string fieldToSortOn = sortingCodeToSortField[sortCode]; 

var whatYouHaveSoFar = this.currentDocuments.OrderByDescending(x => x.Created).ThenBy(x => x.Description); 

var whatYouWant = whatYouHaveSoFar.AsQueryable.OrderBy(fieldToSortOn); 

return whatYouWant.ToList(); 

動態的LINQ庫可以是一個小傻瓜;請務必查看下載的html頁面,因爲它具有比Scott Gu的帖子更好的文檔。祝你好運,並隨時再問一次,如果我誤解了一些東西。