【问题标题】:LINQ query syntax with comparator带有比较器的 LINQ 查询语法
【发布时间】:2012-04-15 23:07:46
【问题描述】:

考虑这段代码:

 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 查询语法一起使用吗?我知道 lambdas 的解决方案。

【问题讨论】:

    标签: c# .net linq comparator


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
                var files = Directory.GetFiles("C:\\");
                var dataFiles = from file in files
                                where System.IO.Path.GetExtension(file) == extension
                                orderby file
                                select file;
        

        这可能会对你有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-30
          • 1970-01-01
          • 1970-01-01
          • 2015-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多