通过在开头放置以特定字母开头的单词来对字符串列表进行排序

Pea*_*yle 4 c# linq list

假设我有以下列表:

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)

Jam*_*iec 5

你得到一个区分大小写的比较,你也需要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

之前的答案显示了进行不区分大小写的比较的正确方法(即,不要使用我上面的例子,它的不好)