我正在编写一个LINQ查询,它有一种子查询。它看起来像这样:
var x = from p in pc
let Cntrs = p.GetCounters().Where(args => args.CounterName == CounterName)
select Cntrs;
Cntrs是一个PerformanceCounter对象。但是,intellisense将其作为具有集合方法的集合返回。
我没有看到NextValue等属性(这就是我想要的)。
我错过了什么?另外,我知道之前一定有人问过,let和into关键字之间的区别是什么?
由于
答案 0 :(得分:1)
这意味着Where
方法返回多个实例,换句话说,您有多个计数器,其名称等于CounterName
变量的值。
如果你不关心你得到哪一个,你可以使用FirstOrDefault
扩展方法从Where
中返回序列中的第一个项目,如下所示:
var x = from p in pc
let Cntrs = p.GetCounters()
.Where(args => args.CounterName == CounterName)
.FirstOrDefault()
select Cntrs;
答案 1 :(得分:0)
不要使用var关键字,这个谜团将被解决。
x是IEnumerable<PerformanceCounter>
此外,我知道这一定是 之前问过,有什么区别 let和into关键字之间?
关键字let
将新的查询变量引入范围。
from c in Customer
let firstOrder = c.Orders.First()
select new {c, firstOrder}
关键字into
将新的查询变量引入范围,并从范围中删除所有先前的查询变量。
from c in Customer
select new {c.Name, c.Orders} into smallerCustomer
select smallerCustomer.Name
c不在最后一个select子句的范围内。
from c in Customer
group c by c.Name[0] into g
select g.First()