2010-10-22 79 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