我想知道是否可以在执行查询本身的同时对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每个循环。
感谢。
答案 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));