我正在使用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.
答案 0 :(得分:0)
只需为实体frameowrk对象创建一个部分类,并使其实现接口。
另一种方法是创建一个你想要的类型列表
然后在linq数据集上为每个数据集执行a并将项目添加到集合中。
问题是由于.net不知道如何投射造成的
List<ISomething>
成List<Something>
答案 1 :(得分:0)
嗯,错误是准确的。您不能在L2E查询中执行此操作,因为您的接口(IReport
)不是实体模型的一部分,因此无法转换为SQL。您必须使用实体类型,而不是接口。