2012-08-15 116 views
4

我寫類似下面的LINQ查詢:LINQ「AsEnumerable」和實體框架

var test = from o in dbcontext.Orders.AsEnumerable() 
     where o.ID==1 
     select new Order 
     { 
      Name = GetName(o.ID) 
     }; 

爲了調用LINQ查詢內外部功能,我使用的查詢中AsEnumerable()

我明白,通常查詢不會執行,直到像ToList()等枚舉函數被調用。但是在這裏,我在的查詢中調用

任何人都可以告訴我,如果它被認爲是不好的做法,使用AsEnumerable()這樣?在創建查詢後,它會在性能方面遭受損失嗎?請致電ToList()

+1

值得閱讀:https://stackoverflow.com/questions/10110266/why-linq-to-entities-does-not-recognize-the-method-system-string-tostring/43262421#43262421 – Lijo 2017-06-20 21:02:52

回答

5

我做

var ids = from o in dbcontext.Orders 
      where o.ID==1 
      select new { ID = o.ID }; 

var names = from i in ids.AsEnumerable() 
      select new Order { Name = GetName(i.ID) }; 

即做盡可能多的查詢儘可能在數據庫中,然後只執行在C#中的ID到名稱的轉換。

+1

原則上是但,只有當'dbContext.Orders'暴露的類型實現IEnumerable''的方式優於標準'IEnumerable'擴展。由於不清楚「dbContext.Orders」是什麼類型,我不能說。 – Jodrell 2012-08-15 11:10:33

+1

它來自實體框架,不是嗎? – Rawling 2012-08-15 11:21:04

+0

剛注意到標籤,我想你可能是對的。 – Jodrell 2012-08-15 15:02:32