C# 意外的Linq OrderBy

C# 意外的Linq OrderBy,c#,linq,C#,Linq,我的以下测试未通过: [TestCase] public void Should_order_numeric_suffix() { var names = new List<string> { "Buisness Unit 7", "Business Unit 1", "Buisness Uni

我的以下测试未通过:

[TestCase]
public void Should_order_numeric_suffix()
{
    var names = new List<string>
                    {
                        "Buisness Unit 7",
                        "Business Unit 1",
                        "Buisness Unit 3",
                        "Business Unit 6",
                        "Business Unit 4",
                        "Buisness Unit 2",
                        "Business Unit 5"
                    };

    List<string> ordered = names.OrderBy(x => x).ToList();

    Assert.That(ordered[0], Is.EqualTo("Business Unit 1"));
}

显然,它按字母顺序排列正确,但我希望数字后缀也按字母顺序排列。

您的列表中有拼写错误,有些条目拼写为“Business”而不是“Business”。。。按字母顺序,“Business”排在“Business”之前

您正在寻找自然排序顺序,这在GroupBy中默认不实现 您将需要实现一个自定义IComparer

当然,这些都是现成的,例如:


您可以尝试如下方式重写查询:

List<string> ordered = (from n in names
                        orderby n
                        select n).ToList<string>();
List ordered=(从名称中的n开始)
订货人
选择n.ToList();

您的代码中有输入错误:
业务
业务
相比。当考虑到这一点时,排序是完全正确的。注意,即使在修复了打字错误之后,它也会在
bu2
之前排序
bu10
。注意,没有10个问题。哈,这很有趣,我没有将数据输入到数据库中,在数据库中我提取了测试数据。但这并没有回答问题:-为什么否决?这是OP看到的行为的正确解释。。。
List<string> ordered = (from n in names
                        orderby n
                        select n).ToList<string>();