2012-02-24 119 views
0

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

例子:

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

发现一套标准中的所有文件,但如果我想说微调“C:\”从返回的每个字符串,可我不知怎么说,S =后F(S) where子句或将这是每个循环的单独foreach。

谢谢。

回答

2

的Where语句后,您可以添加此

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

,将返回与C字符串:\剥离。

2

是的,你可以使用Select方法来做到这一点:

var files = Directory.EnumerateFiles(/* ... */) 
        .Where(/* ... */) 
        .Select(s => s.StartsWith(@"C:\") ? s.Substring(3) : s); 
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));