2010-10-22 78 views
2

我正在使用來自LinqKit的PredicateBuilder構建我的查詢。 這是偉大的,而且正是我所期待的。EntityFramework正在鑄造問題

爲了讓我的代碼的可重用性(表和視圖),我創建了一個通用的謂詞生成器類:

public class LocalPredicateBuilder<T> where T : IResort 
... 
    var predicate = PredicateBuilder.True<T>(

暴露BuildPredicate方法。我可以這樣使用它:

var predicate = new LocalPredicateBuilder<Resort>().BuildPredicate(); 
var resorts = _entities.Resorts.Where(predicate).ToList(); 

然而,當我嘗試這樣做,我得到這個運行時錯誤(順便說一句實體對象實現IResort): 無法轉換類型「ConsoleApplication1.Entities.Resort」來鍵入'ConsoleApplication1.Entities.IResort'。 LINQ到實體僅支持鑄造實體數據模型的基本類型

我試圖鑄造(沒有工作):

var rlist = eq.Cast<Resort>().ToList(); 

任何其他辦法可以解決這個問題,鑄造?

UPDATE

沒有多少運氣得到謂詞使用接口工作..所以我solved my problem by going with POCOs.

回答

0

好,誤差是準確的。您無法在L2E查詢中這樣做,因爲您的界面(IReport)不是您實體模型的一部分,因此無法轉換爲SQL。你必須使用一個實體類型,而不是一個接口。

0

剛剛創建的實體frameowrk對象的部分類,並實現該接口。

另一種方式是創建類型的列表中選擇所需

然後爲每個在LINQ數據集做了,並添加項目到集合中。

問題造成的,因爲.NET犯規知道怎麼投 List<ISomething>List<Something>

+0

我有。將無法編譯,否則 – 2010-10-22 14:06:46

+0

好吧然後它的問題,我已經添加後編輯。 – 2010-10-22 14:30:51

+0

查詢實際上返回列表所以它應該有可能進行該演員。 ISomething僅用於創建用於查詢的謂詞。 – 2010-10-22 16:45:25