我有以下linq查询:
var files = (from d in new DirectoryInfo(@"c:\program files").GetDirectories()
where d.GetFiles().Count() > 10
where d.GetFiles().Count() < 100
select d
);
Run Code Online (Sandbox Code Playgroud)
但是,正如你在上面看到的那样,我调用d.GetFiles().Count()两次,这就是=>运算符的概念派上用场了.
使用jdehaan的语法,为什么我不能直接这样做:
var files = (from d in new DirectoryInfo(@"c:\program files").GetDirectories()
where(x => x.GetFiles().Count() > 10) &&
(x.GetFiles().Count() < 100))
select d
);
Run Code Online (Sandbox Code Playgroud)
我知道上面是愚蠢的,因为我可以用d.GetFiles().Count()来做我的原始查询,但我很好奇使用Where而不是关键字where之间的区别.
Bri*_*sen 14
用于let在查询中分配,如下所示
var files = (from d in new DirectoryInfo(@"c:\program files").GetDirectories()
let f = d.GetFiles().Count()
where f > 10
where f < 100
select d
);
Run Code Online (Sandbox Code Playgroud)
正如Reed Copsey所指出的,你可以使用合并这两个where子句&&.
此外,由于GetFiles返回一个数组,您可以使用该Length属性而不是Count方法.
var files = (from d in new DirectoryInfo(@"c:\program files").GetDirectories()
let f = d.GetFiles().Length
where f > 10 && f < 100
select d
);
Run Code Online (Sandbox Code Playgroud)
Lambda表达式在这里没有帮助,但let关键字可能......
var files = from d in new DirectoryInfo(@"c:\program files").GetDirectories()
let c = d.GetFiles().Count()
where c > 10 && c < 100
select d;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |