我可以将orderby linq关键字与比较器一起使用吗?

时间:2013-01-25 19:37:58

标签: .net linq

我正在查看101 LInQ示例[1],它们暗示我可以使用具有LInQ orderby功能的Comparer。但是在这个例子中,他们使用了扩展方法。我的问题是,我可以在语言综合查询中使用比较器吗?

[1] http://code.msdn.microsoft.com/SQL-Ordering-Operators-050af19e#OrderBycomparer

更新:我正在寻找的是我的查询的实际语言集成。像下面这样的东西会很好:

string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" }; 
var sortedWords = from x in words
                  orderby (x,y) => string.Compare(x,y)
                  select x;

或者更简洁:

string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" }; 
var sortedWords = from x in words
                  orderby string.Compare
                  select x;

1 个答案:

答案 0 :(得分:4)

使用他们的例子:

string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" }; 

var sortedWords = words.OrderBy(a => a, new CaseInsensitiveComparer()); 

如果你想将它缩短为

var sortedWords = words.OrderBy(new CaseInsensitiveComparer());

您可以创建绕过Lambda的另一种扩展方法:

public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> source, IComparer<T> comparer)
{
    return source.OrderBy(a=>a, comparer);
}

无论哪种方式,它(在我看来)都没有足够大的收益(保存8个字符?)来绕过标准的lambda语法。