EntityFramework Casting问题

时间:2010-10-22 13:05:09

标签: linq entity-framework casting predicate

我正在使用LinqKit的PredicateBuilder构建我的查询。 它很棒,完全符合我的要求。

为了使我的代码更可重用(表和视图),我创建了一个通用谓词构建器类:

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();

然而,当我尝试这样做时,我得到这个运行时错误(btw实体对象实现IResort): 无法将“ConsoleApplication1.Entities.Resort”类型转换为“ConsoleApplication1.Entities.IResort”类型。 LINQ to Entities仅支持转换实体数据模型基元类型

我试过施法(没用):

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

我可以解决这个演员问题吗?

更新

没有太多运气让谓词使用接口工作..所以我solved my problem by going with POCOs.

2 个答案:

答案 0 :(得分:0)

只需为实体frameowrk对象创建一个部分类,并使其实现接口。

另一种方法是创建一个你想要的类型列表

然后在linq数据集上为每个数据集执行a并将项目添加到集合中。

问题是由于.net不知道如何投射造成的 List<ISomething>List<Something>

答案 1 :(得分:0)

嗯,错误是准确的。您不能在L2E查询中执行此操作,因为您的接口(IReport)不是实体模型的一部分,因此无法转换为SQL。您必须使用实体类型,而不是接口。