在查询的同时更改LINQ查询中返回的每个值

时间:2012-02-24 11:13:57

标签: c# linq

我想知道是否可以在执行查询本身的同时对LINQ查询中返回的每个元素执行操作。

示例:

var files = Directory.EnumerateFiles(@"C:\etc", "*.*", SearchOption.AllDirectories)
                     .Where(s => (s.ToLower().EndsWith(".psd")) 
                                 && 
                                 new FileInfo(s).Length > 500000);

查找设置条件中的所有文件,但是如果我想从返回的每个字符串中修改“C:\”,我可以在where子句之后以某种方式说s = f(s),或者这是一个单独的foreach每个循环。

感谢。

3 个答案:

答案 0 :(得分:2)

在Where语句之后,您可以添加此

.Select( s => s.Replace(@"C:\",""));

这将返回带有C:\ stripped的字符串。

答案 1 :(得分:2)

是的,您可以使用Select方法执行此操作:

var files = Directory.EnumerateFiles(/* ... */)
                     .Where(/* ... */)
                     .Select(s => s.StartsWith(@"C:\") ? s.Substring(3) : s);

答案 2 :(得分:1)

您想使用Select子句进行投影:

var files = Directory.EnumerateFiles(@"C:\etc", "*.*", SearchOption.AllDirectories) 
  .Where(s => s.ToLower().EndsWith(".psd") && new FileInfo(s).Length > 500000)
  .Select(s => s.Substring(3));