代码之家  ›  专栏  ›  技术社区  ›  Sonic Soul

实体框架转换问题

  •  2
  • Sonic Soul  · 技术社区  · 15 年前

    我正在使用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 entity objects implement IResort): 无法将类型“ConsoleApplication1.Entities.Resort”转换为类型“ConsoleApplication1.Entities.IResort”。LINQ to Entities只支持转换实体数据模型原语类型

    我试过选演员(没用):

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

    我还有别的办法解决这个演员问题吗?

    更新

    solved my problem by going with POCOs.

    2 回复  |  直到 9 年前
        1
  •  0
  •   Craig Stuntz    15 年前

    嗯,这个错误是准确的。在L2E查询中不能这样做,因为您的接口( IReport

        2
  •  0
  •   John Nicholas    15 年前

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

    另一种方法是创建所需类型的列表

    这个问题是由于.net不知道如何进行 List<ISomething> List<Something>