我正在查看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;
答案 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语法。