2011-03-27 88 views
2

我想知道如何編寫Linq(在標準點符號中使用lambda表達式)查詢。 我有一些名稱的數組,我想根據一個語句撤消一個新的數組名稱。這是:對名稱數組進行排序,並從名稱上返回一個新的列表,該名稱以某個特定字母(可以說是字母M)開始。Lambda表達式 - 選擇運算符

這是我目前的數組:

string[] arrNames = { "Mike", "Zach", "Ella", "Allan", "Jo", "Roger", "Tito" }; 

我想回到這樣的名字:邁克,羅傑,鐵托,扎克 - 這4個; 其他3個名字(Allan,Ella和Jo是以字母順序的下劃線字母「M」開頭的名字 這與使用「StartsWith」運算符不同,它只是選擇開始的名字具體的一封信。我想獲得所有這些都是由這封信和字母順序的名字(這樣的名字開始從M到Z)

所以retun列出其名稱以字母「M」開頭或看着上面的字母順序。

米蒂亞

回答

5
var result = arrNames.Where(i => String.Compare("M", i) <= 0) 
        .OrderBy(i => i); 
4

看起來你需要這個:

arrNames.Where(n => string.Compare(n, "M") >= 0) 

返回所有名稱的字母順序大於(或等於)「M」,在默認順序(在你的情況{ Mike, Zach, Roger, Tito })。

如果要另外進行排序,請使用

arrNames.Where(n => string.Compare(n, "M") >= 0).OrderBy(n => n) 

這給{ Mike, Roger, Tito, Zach }

1
arrNames.Where(s => string.Compare(s,"M",StringComparison.InvariantCultureIgnoreCase) >= 0).OrderBy(s => s); 

如果你想不區分大小寫的比較。或者使用StringComparison.InvariantCulture區分大小寫。爲字符串比較指定文化通常是一個好主意(例如,您可以使用當前文化或不變文化)。

如果您的整理點只是爲了獲得超出「M」的項目,那麼您可能會省略OrderBy。

+0

'運算符'> ='不能應用於'string'和'string''類型的操作數 – zerkms 2011-03-27 13:18:33

+0

這不能編譯在我身邊:( – Vlad 2011-03-27 13:18:38

+0

糟糕!對不起!我很習慣重載我的字符串運算符。將編輯答案。 – 2011-03-27 13:25:09