这是一部分示例代码var query = from c in Costomers
            where c.coutry = = "Italy"
            select c.companyName;foreach(string name in query)
{
  Console.WriteLine(name);
}问题是:这个query是什么,存储的是什么内容——存储的是查询结果吗?他的类型是什么?
query是数组吗?
              
           请大神帮忙详细解释下,谢谢!

解决方案 »

  1.   

    LINQ查询的结果一般都用var类型来表示。
      

  2.   

    LINQ的底层是IEnumerable.所以这个query也是。
      

  3.   

    满足你条件的Costomers
    ,等于筛选后的Costomers
      

  4.   

    你后面 from c in Costomers
                where c.coutry = = "Italy"
                select c.companyName;查询出来的数据类型是什么就是什么类型
      

  5.   

    如果Costomers(Customers)是IQueryable<Customer>,也就是LINQ to SQL,那么查询出来的是IQueryable<string>,如果Customers是List<Customer>或者Customer[]或者别的对象,也就是LINQ To Object,那么query是IEnumerable<string>。你可以加上
    Console.WriteLine(query.GetType());
    看看输出什么类型。
      

  6.   

    IEnumerable<T>是这样一种类型,它内部提供Reset() GetCurrent() MoveNext()三个方法,使得你可以用foreach遍历它,但是它本身未必是一个集合。这使得当你从IEnumerable<T>获取几个元素的时候,它不必先计算和存储全部元素。它实现了设计模式的迭代器模式。对比下面的代码:
    List<int> ZeroTo10000000()
    {
        var result = new List<int>();
        for (int i = 0; i <= 10000000; i++) result.Add(i);
        return result;
    }和
    IEnumerable<int> ZeroTo1000000_2()
    {
        for (int i = 0; i <= 10000000; i++) yield return i;
    }
    调用
    var query1 = from x in ZeroTo10000000().Take(10) select x;
    var query2 = from x in ZeroTo10000000_2().Take(10) select x;
    很明显,第二个查询要快很多。
      

  7.   

    query是个数组,且是一维数组(就你的例子来说)----同时是LINQ查询出来的结果
      

  8.   


    对于“同时是LINQ查询出来的结果”我有个疑问,我写的那个代码不是只有在foraech遍历的时候才会执行查询么?  那么对于下面的语句:
       var query = from c in Costomers
                where c.coutry = = "Italy"
                select c.companyName;
      执行结束时并没有执行查询而只是定义了查询,那么query存储的是什么呢,难道是把这些查询语句作为字符串存储到query中吗?
      

  9.   

    var关键字指示编译器能够根据变量的初始化表达式推断出该变量的类型,即使用var关键字声明变量时隐藏了该变量的类型