此LINQ表达式的说明

时间:2011-09-22 09:11:27

标签: c# .net linq

如果有人能在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

3 个答案:

答案 0 :(得分:4)

代码所在的类实现IEnumerable<T>IQueryable<T>,因为它需要能够调用IEnumerable.WhereIQueryable.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.WhereQueryable.Where。如果您可以向我们展示此呼叫所在类型的声明,则会更清楚。

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

this.Where

进入Visual Studio并将鼠标悬停在“Where”上,它会显示什么?

编辑:现在我们知道你来自List<Endpoint>(我坦率地建议反对,说实话 - 赞成合成而不是继承;从List<T>得出几乎总是一个坏主意),它真的叫Enumerable.Where

答案 2 :(得分:0)

你的班级实施IEnumerable<T>,所以你可以选择这样做。