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;