假设我有以下列表:
IList<string> list = new List<string>();
list.Add("Mouse");
list.Add("Dinner");
list.Add("House");
list.Add("Out");
list.Add("Phone");
list.Add("Hat");
list.Add("Ounce");
Run Code Online (Sandbox Code Playgroud)
使用LINQ如何选择包含"ou"的单词并对选择进行排序,以便在开头列出以"ou"开头的单词,然后列出包含但不以"ou"开头的单词.我正在尝试创建的列表将是:
Ounce
Out
House
Mouse
Run Code Online (Sandbox Code Playgroud)
我想出了以下内容,但它无法正常工作:
list.Where(x => x.Contains("ou"))
.OrderBy(x => x.StartsWith("ou"))
.Select(x => x);
Run Code Online (Sandbox Code Playgroud)
你得到一个区分大小写的比较,你也需要OrderByDescending().实现不区分大小写的快速而肮脏的方法是ToLowerInvariant():
var result = list.Where(x => x.ToLowerInvariant().Contains("ou"))
.OrderByDescending(x => x.ToLowerInvariant().StartsWith("ou"))
.Select(x => x);
Run Code Online (Sandbox Code Playgroud)
实例:http://rextester.com/GUR97180
之前的答案显示了进行不区分大小写的比较的正确方法(即,不要使用我上面的例子,它的不好)