了解System.Data.Linq.Table <t>

时间:2015-10-26 17:24:35

标签: c# linq-to-sql

我正在查看this blog

如果向下滚动一下,会出现一个名为 The DataContext 的部分,其中显示

DataClasses1DataContext内部是名为Customers

的属性
public System.Data.Linq.Table<Customer> Customers
{
    get
    {
        return this.GetTable<Customer>();
    }
}

然后就在下面:

如果编写从数据库中检索客户记录的LINQ查询,则可以通过此属性访问该数据。它的类型为Table,其中内部Table类在这种情况下成为Customer记录的集合。人们通常会通过编写如下代码来访问此属性:

DataClasses1DataContext db = new DataClasses1DataContext(ConnectionString);

var query = from c in db.Customers
            select c;

这是否意味着在引用属性时,将查询并返回整个Customer表?

如果是这样的话,如果表中有很多记录,这是不是有点低效,特别是如果你只想找回一个客户?

由于

1 个答案:

答案 0 :(得分:2)

  

这是否意味着在引用属性时,将查询并返回整个Customer表?

否 - Table<T>实现IQueryable<T>,这意味着查询将被延迟,直到枚举集合为止。

当查询被枚举或转换为linq-to-objects时,

WhereOrderBySelect和其他子句被“附加”到查询并转换为SQL通过AsEnumerable()进行查询。

请注意,您引用的文章正在讨论Linq-to-SQL,但Linq-to-Enitites(实体框架)中的原则相同。查询使用whereorderbygroup byselect等进行构建,并在执行查询时转换为SQL。