EntityFramework Casting issues

假如想象 提交于 2019-12-06 11:21:43

问题


I am building my query using PredicateBuilder from LinqKit. it is great and does exactly what i am looking for.

To make my code more reusable (tables and views) i created a generic predicate builder class:

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

which exposes BuildPredicate method. I can use it like this:

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

however when i try to do this, i get this runtime error (btw entity objects implement IResort): Unable to cast the type 'ConsoleApplication1.Entities.Resort' to type 'ConsoleApplication1.Entities.IResort'. LINQ to Entities only supports casting Entity Data Model primitive types

i tried casting (didn't work):

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

Any other way i can get around this casting issue?

UPDATE

not having much luck getting predicates to work using interfaces.. so i solved my problem by going with POCOs.


回答1:


Well, the error is accurate. You can't do that in an L2E query, because your interface (IReport) is not part of your entity model and hence can't be converted to SQL. You have to use an entity type, not an interface for that.




回答2:


just create a partial class for the entity frameowrk object and make that implement the interface.

the other way would be to create a list of the type you want

then do a for each on the linq dataset and add the items to the collection.

the problem is caused because .net doesnt know how to cast List<ISomething> into a List<Something>



来源:https://stackoverflow.com/questions/3997055/entityframework-casting-issues

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!