2

假设我有以下代码:

using System;
using System.Linq;
using System.Collections.Generic;
public class Developer 
{
    public string Name;
    public string Language;
    public int Age;
}

class App {
    static void Main() {
        Developer[] developers = new Developer[] {
            new Developer {Name = "Paolo", Language = "C#"},
            new Developer {Name = "Marco", Language = "C#"},
            new Developer {Name = "Frank", Language = "VB.NET"}};
        var developersUsingCSharp = from d in developers
                                    where d.Language == "C#"
                                    select d.Name;
        foreach (var item in developersUsingCSharp) {
            Console.WriteLine(item);
        }
    }
}

我没有明确地实现IEnumerable<T>接口。我的问题是 from 子句将采用实现 IEnumerable 接口的类型的实例,但在这种情况下,它是 Developer 类的用户定义类型

示例代码取自 Microsoft .NET Framework Book 中的 LINQ。

4

2 回答 2

10

System.Array(这是您在使用Developer[]符号时创建的, Implements IEnumerable

于 2013-06-23T03:52:00.230 回答
2

由于您将变量分配给developersUsingCSharplinq 查询的结果,因此它是类型IEnumerable<string>IQueryable<string>如果这是实体框架查询或类似的东西,它将是)。

也许很难准确分析查询语法发生了什么。查询:

var developersUsingCSharp =
    from d in developers
    where d.Language == "C#"
    select d.Name;

相当于流利的语法:

var developersUsingCSharp =
    developers.Where(d => d.Language == "C#")
              .Select(d => d.Name);

LinqSelectWhere扩展方法都接受IEnumerable<T>IEnumerable<T>作为结果返回。所以你绝对可以foreach在结果上使用。

于 2013-06-23T03:50:26.000 回答