看起来在使用LINQ排序时没有考虑特殊字符,我没想到它。无论如何,我需要对特殊字符进行排序,使它们首先出现在列表中。有任何想法吗?我知道我可以做类似的事情:Use LINQ for arbitrary sorting但是如何让sort扩展传递特殊字符:
示例列表:
丹尼尔
答案 0 :(得分:5)
.Net 3.5的一个不太为人所知的功能是你可以用lambda替换IComparer。对于像这样的情况,这对于您想要一次性排序非常方便。如果不是一次性,那么使用自定义IComparer类可能会更好。以下是你如何做这种蛮力风格:
List<string> list = new List<string>();
list.Sort((x, y) =>
{
if(Char.IsLetterOrDigit(x[0])){
if(!Char.IsLetterOrDigit(y[0])){
// x is a letter/digit and y is not, override regular CompareTo
return -1;
}
}
else if (Char.IsLetterOrDigit(y[0]))
{
// y is a letter/digit and x is not, override regular CompareTo
return 1;
}
return x.CompareTo(y);
});
答案 1 :(得分:3)
System.Linq.Enumerable提供OrderBy和ThenBy的重载,接受实现IComparer<T>
的比较器。您只需要编写自己的比较器(一种方法)来定义您希望如何排序字符串。
答案 2 :(得分:0)
qry = qry.OrderBy(q => q.VALUE.Replace("-","aaa"));
这对我有用。很简单。