2011-03-27 75 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