LINQ排序特殊字符第一?

时间:2009-10-06 21:02:02

标签: c# .net linq sorting

看起来在使用LINQ排序时没有考虑特殊字符,我没想到它。无论如何,我需要对特殊字符进行排序,使它们首先出现在列表中。有任何想法吗?我知道我可以做类似的事情:Use LINQ for arbitrary sorting但是如何让sort扩展传递特殊字符:

示例列表:

  • “测试”
  • 测试

丹尼尔

3 个答案:

答案 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"));

这对我有用。很简单。