Func <t,dynamic =“”>到Func <tentity,dynamic =“”>

时间:2017-09-27 10:28:18

标签: c# entity-framework expression func

我有一个包含EF Dbcontext和实体的DAL图层。我有一个服务,其中包含一个方法,我想做一个来自逻辑层的简单选择。

层: 逻辑=&GT; DalService =&GT; DbContext.DbSet.Select(东西)

DAL不了解任何DTO型号。 逻辑层不知道任何实体。

我基本上试图转换: Func<T, dynamic>选择器 至 Func<TEntity, dynamic>选择器,我基本上可以在DbSet<TEntity>上使用。

由于

1 个答案:

答案 0 :(得分:2)

AutoMapper有一个名为Expression Translation的功能,可以完成从逻辑层查询到DAL查询的转换工作。

首先,您需要设置从TEntity(您的DAL中的实体类型)到T(您的逻辑层中的DTO)的映射:

Mapper.Initialize(cfg => cfg.CreateMap<TEntity, T>());

然后,当您的DAL从逻辑层获得一个查询表达式时,如下例所示:

Expression<Func<DTO, dynamic>> logicExpression = (dto) => new { dto.SomeProperty }; 

它可以像这样翻译:

var dalExpression = Mapper.Map<Expression<Func<TEntity, dynamic>>>(logicExpression);

最后根据您的EF上下文调用:

var results = context.SomeSet.Select(dalExpression).ToList();