如果有人能在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
?
答案 0 :(得分:4)
代码所在的类实现IEnumerable<T>
或IQueryable<T>
,因为它需要能够调用IEnumerable.Where或IQueryable.Where方法。
答案 1 :(得分:4)
这是query expression。 C#编译器基本上将其转换为:
Endpoint adapter = this.Where(adap => (endpointName == DEFAULT_ENDPOINT_NAME &&
adap.IsDefault) ||
(endpointName != DEFAULT_ENDPOINT_NAME &&
adap.Name == endpointName))
.FirstOrDefault();
Where
extension method电话可能(但不是必须){可能Enumerable.Where
或Queryable.Where
。如果您可以向我们展示此呼叫所在类型的声明,则会更清楚。
基本上,一旦你应用了“预处理器”步骤,它应该更清楚发生了什么。特别是,如果您输入:
this.Where
进入Visual Studio并将鼠标悬停在“Where”上,它会显示什么?
编辑:现在我们知道你来自List<Endpoint>
(我坦率地建议反对,说实话 - 赞成合成而不是继承;从List<T>
得出几乎总是一个坏主意),它真的叫Enumerable.Where
。
答案 2 :(得分:0)
你的班级实施IEnumerable<T>
,所以你可以选择这样做。