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>();