【问题标题】: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;
这可能会对你有所帮助。