注入linq表达式

时间:2013-02-14 23:02:47

标签: c# asp.net asp.net-mvc linq entity-framework

我在数据库中有父子实体。我需要将一些Childs与他们的父母分别作为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结果,没有前期执行。

0 个答案:

没有答案