我在数据库中有父子实体。我需要将一些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结果,没有前期执行。