2

考虑这段代码:

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

我一直在寻找可以进行“自然排序”的字符串比较器。遗憾的是,这个常见任务没有内置功能。我找到了这篇文章,看起来不错。

我可以将 NaturalStringComparer 与LINQ 查询语法一起使用吗?我知道使用 lambdas 的解决方案。

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
        var files = Directory.GetFiles("C:\\");
        var dataFiles = from file in files
                        where System.IO.Path.GetExtension(file) == extension
                        orderby file
                        select file;

this might help you.

于 2012-05-17T09:24:39.980 回答
1

您需要使用扩展方法语法:

files.OrderBy(file => file.Length, new NaturalStringComparer())
于 2012-04-15T23:17:58.930 回答