我刚开始学习LINQ to SQL,到目前为止,我对易用性和良好性能印象深刻。关于LINQ to SQL基础知识的问题
我曾经以为,从数据库时做LINQ查询,如
from Customer in DB.Customers where Customer.Age > 30 select Customer
LINQ得到所有客户(“SELECT * FROM客户”),将其移至客户数组,然后让该搜索使用.NET方法的数组。这是非常低效的,如果数据库中有成千上万的客户呢?做出如此大的SELECT查询会终止Web应用程序。
现在遇到实际如何快速LINQ to SQL是后,我开始怀疑,这样做查询我刚写的时候,LINQ莫名其妙地将其转换为SQL查询字符串
SELECT * FROM Customers WHERE Age > 30
而且只在必要时它会运行查询。
所以我的问题是:我是对吗?什么时候查询实际运行?
我问的原因不仅仅是因为我想了解它是如何工作以构建优化的应用程序,而是因为我遇到了以下问题。
我有两张桌子,其中一张是书籍,另一张有关于某些日子有多少书籍被出售的信息。我的目标是选择过去10天内每天至少销售50张的书籍。它与这个简单的查询做:
from Book in DB.Books where (from Sale in DB.Sales where Sale.SalesAmount >= 50 && Sale.DateOfSale >= DateTime.Now.AddDays(-10) select Sale.BookID).Contains(Book.ID) select Book
问题是,我有几个查询使用检查的一部分,我决定建立一个与所有流行的书籍ID的数组:
var popularBooksIDs = from Sale in DB.Sales where Sale.SalesAmount >= 50 && Sale.DateOfSale >= DateTime.Now.AddDays(-10) select Sale.BookID;
BUT当我尝试做现在的查询时:
from Book in DB.Books where popularBooksIDs.Contains(Book.ID) select Book
它不起作用!这就是为什么我认为我们不能在LINQ to SQL查询中使用各种快捷方式,就像我们不能在真正的SQL中使用它们一样。我们必须创建简单的查询,对吗?
为了适应速度,我强烈推荐LINQPad。这很难描述,但它基本上是LINQ查询,你可以很容易地看到后台发生了什么。非常适合测试新的查询。 http://www.linqpad.net/ – Steve 2010-03-23 21:09:56