2011-05-20 82 views
-1

是否可能通過Expression類執行a選擇(投影)傳遞數據字段作爲字符串以實現強類型集合?表達式Lambda - 檢索提取

這是因爲我正在與Linq合作,我可以通過抓取wpf網格列名來進行一些改進。

是否存在類似Expression.Lamba.Select(「field1,field2」),它返回一個List ..?

+0

你應該這樣做,從實體屬性創建列名稱。 – svick 2011-05-20 20:58:01

+0

看看Rob Conery在他的[Massive project]中使用的一些技巧(http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive) – 2011-05-20 21:08:53

回答

1

您可以創建一個方法,該方法可以調用Select(),其表達式將從實體中的屬性創建Tuple(或可能是其他內容),並讓EF處理其餘部分。

問題是,你可以用強類型方式處理這種方法的結果的唯一方法是,如果你知道它應該以編譯類型返回的確切類型,這看起來你沒有。

您可以做的最好的辦法是將結果視爲非泛型IEnumerable或者嘗試使用dynamic

+0

我可以創建一些東西像下面這樣:IEnumerable DoSelect(string [] field)where T:class {... return Expression.Lambda..etc。我最好不要使用動態類型。你能告訴我一些例子嗎?我不是Expression類的專家。 – bit 2011-05-21 05:28:26

+0

@bit,你想如何使用它?如果你想指定返回類型和字段,這意味着你知道你想選擇什麼字段,並且不需要字符串參數。或者你想只填寫一些類型的字段? – svick 2011-05-21 10:30:53

+0

好吧,這是我的問題:我必須通過在我的網格中應用一些相關的聲明列來檢索任何實體,所以我不能使用經典的Select lambda。所有我知道的是要以字符串格式(列名)選擇的屬性,因此,調用者將執行如下操作:obj = Retrieve (new string [] {「id」,「name」}); ....和我的檢索方法可能會出現如下所示:IQueryable 檢索(字符串[] fileds)其中T:class ..注意thah obj已經是IQeryable 對象。你有沒有意識到我? – bit 2011-05-21 12:21:07