Lambda表达式 - 选择运算符

时间:2011-03-27 13:05:42

标签: c# linq linq-to-objects

我想知道如何编写Linq(使用标准点表示法中的lambda表达式)查询。 我有一些名字的数组,我想根据一个声明retrevie一个新的名字数组。这是:对名称数组进行排序,并从名称中返回一个新列表,该名称以某个特定字母(比如字母M)开头。

这是我目前的数组:

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

我想回复这样的名字:Mike,Roger,Tito,Zach--这4个; 其他3个名字(Allan,Ella和Jo是以字母顺序开头的字母“M”开头的名字。 这与使用Operator“StartsWith”不同。这个只选择在特定字母上开头的名字。 我想从这封信中获取所有按字母顺序排列的名称(因此名称从M到Z开始)

因此,以字母顺序“M”开头的字母顺序列表以字母“M”开头。

米蒂亚

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

看起来你需要这个:

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

以默认顺序(在您的情况下为{ Mike, Zach, Roger, Tito })按字母顺序返回大于(或等于)“M”的所有名称。

如果您想另外对其进行排序,请使用

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

这会给{ Mike, Roger, Tito, Zach }

答案 2 :(得分:1)

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

如果您想要不区分大小写的比较。或者使用StringComparison.InvariantCulture区分大小写。为字符串比较指定文化通常是个好主意(例如,您可以使用当前文化或不变文化)。

如果您的整个排序点只是为了获得超出“M”的项目,那么您可以省略OrderBy。