2013-08-30 45 views
1

這是我在LinqPad中使用Linq to Entity Framework測試的查詢的要點。LINQ to EF返回所有字段,不僅僅是Select()中的那些

在我看來,結果SQL應該像SELECT TableA.ID as myID一樣開始。相反,SELECT包含所有表中的所有字段。不用說,這導致了其他問題中的大規模性能下降。我怎樣才能防止這一點?

var AnswerList = this.Answers 
       .Where(x=> 
        ..... various conditions on x and related entities... 
       ) 
       .GroupBy(x => new {x.TableA,x.TableB,x.TableC}) 
       .Select(g=>new { 
         myID = g.Key.TableA.ID, 
       }) 


AnswerList.Dump(); 

在實踐中,我使用的是新類型而不是匿名類型,但結果是相同的。

讓我知道你是否需要我填寫更多...的。

UPDATE

我發現我可以明確指定我想在的GroupBy方法返回的領域,例如防止這個問題new {x.TableA.ID ... }

但我仍然不明白爲什麼它不工作只是使用Select方法(當在Linq to SQL中執行等效工作時它工作)。

+0

這是不可能的。您只選擇一個具有Property'myID'的匿名對象。 –

+0

嗨 - 也許我的問題並不清楚 - 我試圖阻止它從數據庫中返回所有的字段。我只想要myID,但是所有的字段都會返回,然後myID被提取到內存中。 – rwalter

+0

您是否使用SQL Server Management Studio Profiler進行測試?我測試了一個類似的查詢,最上面的SELECT只返回一列。 – Alireza

回答

0

嗨,

能否請您嘗試以下....?

var query = from SubCat in mySubCategory 
     where SubCat.CategoryID == 1 
     group 1 by SubCat.CategoryID into grouped 
     select new { Catg = grouped.Key, 
      Count = grouped.Count() }; 

謝謝 維沙爾帕特爾

相關問題