2013-05-08 37 views
1

我想在鏈接到數據庫查詢的IQUeryable上運行選擇。它的工作正常,但對於所有被選中的屬性,它運行一個單獨的查詢。LINQ選擇使許多SQL調用的語句

我的代碼看起來是這樣的

IQueryable<MyDataSource> data = [Some Complicated Query I've been Building Up]; 

var results = data.Select(d => new 
{ 
A = d.A, 
B = d.B, 
C = d.C 

}).Take(100).ToArray(); 

現在,這個正在老化,即使實際查詢不採取長。 當我運行一個SQL事件探查器時,我發現它爲我選擇的每個屬性運行不同的SQL選擇過程 - 對於我返回的每個實體(因此在上例中大約有300個不同的查詢,以及執行過濾的實際第一個查詢)。

我很確定我在這裏做錯了什麼,它是什麼?我期待它運行一個大型查詢 - 它從數據源中選擇正確的列(你知道從[bla bla]選擇top top 100 d.A,d.B,d.C),而不是所有這些混亂。

+0

可能dublicate http://stackoverflow.com/questions/7051287/using-linq-select新建類型太慢了?rq = 1 – JleruOHeP 2013-05-08 10:17:06

+0

您需要使用'IQueryable '而不是'IEnumerable '。 – 2013-05-08 10:18:53

+2

這些值可能標記爲懶惰,也許?另外:我會非常感興趣的是看看'[我已經構建的一些複雜的查詢]是如何組成的 - 特別是在什麼時候變成'IEnumerable '而不是'IQueryable '。如果你想讓'select'包含所引用的3個屬性,'data'是'IQueryable ',而不是'IEnumerable '是非常重要的。 – 2013-05-08 10:19:08

回答

0

可以使用DataLoadOptions

影響懶/預先加載這將迫使預先加載對於B

DataLoadOptions options = new DataLoadOptions(); 
options.LoadWith<a>(a => a.B); 
dc.LoadOptions = options;