4

101 の LInQ の例 [1] を見ていましたが、LInQ の orderby 機能で Comparer を使用できることを暗示しています。しかし、この例では、パントして拡張メソッドを使用しています。私の質問は、Language Integrated Query 内で比較子を使用できますか?

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

いずれにせよ、(私の意見では) 標準のラムダ構文をバイパスするのに十分なゲイン (8 文字が節約された?) ではありません。

于 2013-01-25T19:49:16.087 に答える