2

このコードを考えてみましょう:

 var files = Directory.GetFiles(filePath);
 var dataFiles = from file in files
                 where System.IO.Path.GetExtension(file) == extension 
                 orderby file.Length
                 select file;

私は「自然ソート」を行う文字列コンパレータを探していました。残念ながら、この一般的なタスクには組み込みの機能はありません。私はこの投稿を見つけました、そしてそれはよさそうです。

LINQクエリ構文でNaturalStringComparerを使用できますか?私はラムダを使った解決策を知っています。

4

3 に答える 3

5

残念ながらOrderBy、カスタム比較機能を使用したオーバーロードはクエリ構文でサポートされていないため、これは不可能です。メソッド構文のみがアクセス可能になります。

var comparer = new NaturalStringComparer();
var dataFiles = files.Where(f => System.IO.Path.GetExtension(f) == extension)
                     .OrderBy(f => f, comparer);
于 2012-04-15T23:17:50.610 に答える
1

拡張メソッドの構文を使用する必要があります。

files.OrderBy(file => file.Length, new NaturalStringComparer())
于 2012-04-15T23:17:58.930 に答える
1
        var files = Directory.GetFiles("C:\\");
        var dataFiles = from file in files
                        where System.IO.Path.GetExtension(file) == extension
                        orderby file
                        select file;

これはあなたを助けるかもしれません。

于 2012-05-17T09:24:39.980 に答える