我有一组字符串。我想选择包含另一个字符串的所有字符串。但我希望将第一项作为搜索开头的项目,然后按字母顺序排列其他项目。但是以下代码不起作用:
items = items
.Where(a => a.Contains(contained))
.OrderBy(a => a)
;
var startsWith = items.Where(a => a.StartsWith(contained));
items = startsWith.Union(items.Except(startsWith));
我必须做什么?
答案 0 :(得分:5)
用startsWith.Concat
替换startsWith.Union答案 1 :(得分:5)
除了迈克尔的选择,您还可以通过布尔:
订购items = items.OrderBy(x => !x.Contains(contained))
.ThenBy(x => x);
请注意,false
在true
之前排序,因此!在这里 - 您还可以使用条件来使其更清晰:
items = items.OrderBy(x => x.Contains(contained) ? 0 : 1)
.ThenBy(x => x);
测试程序:
using System;
using System.Linq;
public class Test
{
static void Main()
{
var items = new string[] { "the", "quick", "brown", "fox",
"jumps", "over", "the", "lazy", "dog" };
var query = items.OrderBy(x => !x.Contains("o"))
.ThenBy(x => x);
foreach (string word in query)
{
Console.WriteLine(word);
}
}
}
输出:
brown
dog
fox
over
jumps
lazy
quick
the
the
答案 2 :(得分:2)
您可以使用其他OrderBy
子句。
items = items.Where(a => a.Contains(contained))
.OrderBy(a => a.StartsWith(contained) ? 0 : 1)
.ThenBy(a => a);