Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中使用两个排序标准?_C#_.net_Linq_C# 3.0 - Fatal编程技术网

如何在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,它只是按字母顺序排列的。用一个例子和所有的一切来击败我:)