如何在C#中使用两个排序标准?
我有一套弦。我想选择包含另一个字符串的所有字符串。但是我想把以搜索开始的项目作为第一个项目,然后按字母顺序排列其他项目。但以下代码不起作用:如何在C#中使用两个排序标准?,c#,.net,linq,c#-3.0,C#,.net,Linq,C# 3.0,我有一套弦。我想选择包含另一个字符串的所有字符串。但是我想把以搜索开始的项目作为第一个项目,然后按字母顺序排列其他项目。但以下代码不起作用: items = items .Where(a => a.Contains(contained)) .OrderBy(a => a) ; var startsWith = items.Where(a => a.StartsWith(contained)); items = startsWith.Union(items.Ex
items = items
.Where(a => a.Contains(contained))
.OrderBy(a => a)
;
var startsWith = items.Where(a => a.StartsWith(contained));
items = startsWith.Union(items.Except(startsWith));
我必须做什么?用startsWith.Concat替换startsWith.Union以及Michael的选项,您还可以按布尔值排序:
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
您可以使用另一个
OrderBy
子句
items = items.Where(a => a.Contains(contained))
.OrderBy(a => a.StartsWith(contained) ? 0 : 1)
.ThenBy(a => a);
当你说“下面的代码不起作用”时,到底发生了什么?@Michael,它只是按字母顺序排列的。用一个例子和所有的一切来击败我:)