我想知道如何编写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”开头。
米蒂亚
答案 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。