LINQ查询语法与比较器

时间:2012-04-15 23:07:46

标签: c# .net linq comparator

考虑以下代码:

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

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

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

3 个答案:

答案 0 :(得分:5)

不幸的是,这是不可能的,因为在查询语法中不支持使用自定义比较器的OrderBy重载 - 只有方法语法才能使其可访问:

var comparer = new NaturalStringComparer();
var dataFiles = files.Where(f => System.IO.Path.GetExtension(f) == extension)
                     .OrderBy(f => f, comparer);

答案 1 :(得分:1)

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

files.OrderBy(file => file.Length, new NaturalStringComparer())

答案 2 :(得分:1)

        var files = Directory.GetFiles("C:\\");
        var dataFiles = from file in files
                        where System.IO.Path.GetExtension(file) == extension
                        orderby file
                        select file;

这可能对你有帮助。