我正在查看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表?
如果是这样的话,如果表中有很多记录,这是不是有点低效,特别是如果你只想找回一个客户?
由于
答案 0 :(得分:2)
这是否意味着在引用属性时,将查询并返回整个Customer表?
否 - Table<T>
实现IQueryable<T>
,这意味着查询将被延迟,直到枚举集合为止。
Where
,OrderBy
,Select
和其他子句被“附加”到查询并转换为SQL通过AsEnumerable()
进行查询。
请注意,您引用的文章正在讨论Linq-to-SQL,但Linq-to-Enitites(实体框架)中的原则相同。查询使用where
,orderby
,group by
,select
等进行构建,并在执行查询时转换为SQL。