Entity framework 自动映射子查询中的映射

Entity framework 自动映射子查询中的映射,entity-framework,automapper,Entity Framework,Automapper,更新:问题已在当前版本中修复 使用AutoMapper 3.3、QueryableExtensions和EF6 我有一个用户要求返回在当前用户之前创建的其他用户的计数 我有以下几点 public class User { public int Id {get;set;} public string Name { get; set; } public DateTime? DateActivated {get;set;} } public c

更新:问题已在当前版本中修复

使用AutoMapper 3.3、QueryableExtensions和EF6

我有一个用户要求返回在当前用户之前创建的其他用户的计数

我有以下几点

public class User 
   {
       public int Id {get;set;}
       public string Name { get; set; }
       public DateTime? DateActivated {get;set;}
   }

public class UserViewModel
   {
       public int Id {get;set;}
       public string Name { get; set; }
       public DateTime? DateActivated {get;set;}
       public int position {get;set;}
   }

public class AutoMapperConfig
{
    public static void ConfigAutoMapper() {

        var db = new DB();

        Mapper.CreateMap<User, UserViewModel>()
            .ForMember(a => a.position, opt => opt.MapFrom(src => db.Users.Where(u => u.DateActivated < src.DateActivated).Count()));

        Mapper.AssertConfigurationIsValid();
    }
}
最后是实际映射:

user = db.Users.Project().To<T>(new { db = db }).FirstOrDefault(a => a.id == id);
db是一个本地DbContext变量,我使用AutoMapper参数将其插入到映射器中

到目前为止,这是可以编译和运行的,但是user.position的结果是0

我使用sql profiler进行了检查,以下是生成的查询的相关部分:

CROSS JOIN  (SELECT 
            COUNT(1) AS [A1]
            FROM [dbo].[Users] AS [Extent4]
            WHERE ([Extent4].[DateActivated] < [Extent4].[DateActivated]) ) AS [GroupBy1]
注意它是如何在比较的两侧引用Extent4.DateActivated的,这显然会产生0结果

那么我所做的是不可能的吗?还是我做错了什么

如果我可以取消参数化,让automapper能够引用当前的底层db上下文,那将是一个额外的好处

多谢各位

编辑


为了明确起见,此计数将是动态的,因为我在简化的示例中忽略了筛选先前用户的其他标准。

看起来像是一个bug,或者是一个意外的场景。也许你应该在automapper.org上提交一个问题。倾向于非常敏感。@GertArnold TY,我在GitHub上提交了一个问题。Jimmy作为Bug提交: