考虑以下代码:
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的解决方案。
答案 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;
这可能对你有帮助。