1

我在数据库中有父实体和子实体。我需要让一些孩子和他们的父母分别作为 ChildBrief 和 ParentBrief 对象,它们只包含相应实体的一些字段。因此,ParentBrief 和 ChildBrief 是一种底层实体的映射。
我可以写:

IQueriable<ChildBrief> result = Childs.Select(x => new ChildBrief
    {
        Id = x.Id,
        Name = x.Name,
        Parent = new ParentBrief
        { 
            Id = x.Parent.Id, 
            Name = x.Parent.Name
        }
    });

它将被完美地编译成生成的 SQL。但我希望 ParentBrief 映射器成为一个单独的静态函数,可以在其他地方重复使用,例如这里,我执行以下操作:

IQueriable<ChildBrief> result = Childs.Select(x => new ChildBrief
    {
        Id = x.Id,
        Name = x.Name,
        Parent = mapper.Compile()(x.Parent)
    });

private static readonly Expression<Func<Parent, ParentBrief>> mapper =
    m => new ParentBrief
    {
        Id = x.Parent.Id, 
        Name = x.Parent.Name}
    };

EF5 引发一个错误,说明无法调用方法或类似的东西(可能在编译阶段)。
有什么方法可以将简单的表达式(只是平面映射)注入 EF 并使它们正确编译到 SQL 中?我还想在不预先执行的情况下获得 IQueryable 结果。

4

0 回答 0