Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带比较器的LINQ查询语法_C#_.net_Linq_Comparator - Fatal编程技术网

C# 带比较器的LINQ查询语法

C# 带比较器的LINQ查询语法,c#,.net,linq,comparator,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; 我一直在寻找一个字符串比较器,将做“自然排序”。

考虑以下代码:

 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的解决方案。

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

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

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

files.OrderBy(file => file.Length, new NaturalStringComparer())
这可能对你有帮助

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