2011-02-11 73 views
5

我們正在調查實體框架以查看它是否會滿足我們的特定需求。這裏是我感興趣的場景:我有一個很大的表(我們稱之爲VeryWideRecord),它有很多列,它有一個相應的業務對象(它也被稱爲VeryWideRecord)。我希望能夠查詢我的數據庫中的VeryWideRecord業務對象,但只有基礎SQL返回的某些列的值。我可以使用實體框架來做到這一點嗎?實體框架預測

由於應用程序需要能夠(在運行時)更改請求的列,所以我不確定這是否可以使用Entity Framework的表分割功能來完成。這是因爲我們試圖儘量減少通過線路傳遞的信息量。

我看到如何使用NHibernate(example)完成這項工作,但我該如何使用Entity Framework做到這一點?

回答

0

像這樣的東西(在VB.NET:

Dim pl As New List(Of VeryWideRecord)(
    (From p In db.VeryWideRecords 
     Select New With {.RecID = p.RecID} 
    ).ToList().Select(
     Function(r) 
     Return New VeryWideRecord With {.RecID = r.RecID} 
     End Function)) 

有了這個,你有一些編譯時檢查但是,如果你想這樣做真的動態,ESQL是也許更合適 而且,它不是真正的實體框架,但拉姆達表達誰誰的伎倆。

+0

我正在建議pr像你這樣做,但問題表明,所要求的列將在運行時確定,而不是編譯時間。另外,僅供參考,您可以讓EF完成項目的工作,您只需要調用`ToList()`並且投影應該返回一個匿名類型。應該注意的是,在EF處理的投影中你可以做什麼是有限制的(你通常不能在投影中調用函數)。在執行w/o EF投影的情況下,使用`AsEnumerable()`優於`ToList()` – 2011-02-12 00:19:54