这个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 ?

这个LINQ表达式的解释

代码所在的类实现了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.WhereQueryable.Where。如果你能给我们看一下这个调用所在类型的声明,就会更清楚了。

基本上,一旦你应用了"预处理器"步骤,就应该更清楚发生了什么。特别是,如果您输入:

this.Where

进入Visual Studio并悬停在"Where"上,它显示了什么?

编辑:现在我们知道你是从List<Endpoint>派生的(坦率地说,我不建议这样做,诚实地说,比起继承,更喜欢组合;从List<T>派生几乎总是一个坏主意),它实际上调用Enumerable.Where

你的类实现了IEnumerable<T>所以你可以从中选择