我正在查看 101 个 LInQ 示例 [1],它们暗示我可以使用具有 LInQ 排序依据功能的比较器。但在示例中,他们平底船并使用扩展方法。我的问题是,我可以在语言集成查询中使用比较器吗?
[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;
使用他们的例子:
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 个字符?)都不够大。