4

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

[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;
4

1 回答 1

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

无论哪种方式,(在我看来)都不足以绕过标准的 lambda 语法(节省了 8 个字符?)。

于 2013-01-25T19:49:16.087 回答