这个LINQ表达式的解释
本文关键字:解释 表达式 LINQ 这个 | 更新日期: 2023-09-27 18:09:14
如果有人能解释一下下面的LINQ表达式,我将不胜感激:
Endpoint adapter = (from adap in this
where
(endpointName == DEFAULT_ENDPOINT_NAME && adap.IsDefault) ||
(endpointName != DEFAULT_ENDPOINT_NAME && adap.Name == endpointName)
select adap).FirstOrDefault();
我几乎可以得到这个要点,我只是需要帮助的from adap in this
部分。我本以为这是从当前类中选择的,但我在当前类中找不到任何集合。你能告诉我数据可能来自哪里吗,adap
?
代码所在的类实现了IEnumerable<T>
或IQueryable<T>
,因为它需要能够调用IEnumerable。Where或iquerable。方法。
这是一个查询表达式c#编译器基本上把它翻译成:
Endpoint adapter = this.Where(adap => (endpointName == DEFAULT_ENDPOINT_NAME &&
adap.IsDefault) ||
(endpointName != DEFAULT_ENDPOINT_NAME &&
adap.Name == endpointName))
.FirstOrDefault();
很可能(但不是必须)Where
是一个扩展方法调用-可能是Enumerable.Where
或Queryable.Where
。如果你能给我们看一下这个调用所在类型的声明,就会更清楚了。
基本上,一旦你应用了"预处理器"步骤,就应该更清楚发生了什么。特别是,如果您输入:
this.Where
进入Visual Studio并悬停在"Where"上,它显示了什么?
编辑:现在我们知道你是从List<Endpoint>
派生的(坦率地说,我不建议这样做,诚实地说,比起继承,更喜欢组合;从List<T>
派生几乎总是一个坏主意),它实际上调用Enumerable.Where
。
你的类实现了IEnumerable<T>
所以你可以从中选择