2012-04-15 53 views
2

LINQ查询语法考虑下面的代码:与比较

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

回答

5

不幸的是因为OrderBy与自定义比较超载的查询语法不被支持,这是不可能的 - 只有方法的语法使得访问:

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

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

files.OrderBy(file => file.Length, new NaturalStringComparer()) 
1
 var files = Directory.GetFiles("C:\\"); 
     var dataFiles = from file in files 
         where System.IO.Path.GetExtension(file) == extension 
         orderby file 
         select file; 

这可能会帮助你。