首页 > 解决方案 > EF 6 使用子查询结果加入表

问题描述

我有以下 SQL 查询

select M.* from Department M
join 
    (select StudentId,max(Created) Created from Department
    where Type = 'New'
    group by StudentId
    ) 
    A
on M.StudentId= A.StudentId AND M.Created = A.Created

为此,我在 EF linq 下面创建了

(from mmfcl in _Context.Department
      join filtermmfcl in ( _Context.Department
                           .Where(mmfcl => mmfcl.Type == "New")
                           .GroupBy(mmfcl => mmfcl.StudentId)
                           .Select(mmfcl => new 
                           {
                              StudentId= mmfcl.Key,
                              Date = mmfcl.Max(cl => cl.Created)
                           }).ToList()
                          )
     on new { mmfcl.StudentId, mmfcl.Created } equals 
        new { filtermmfcl.StudentId, filtermmfcl.Date }
     Select mmfcl);

使用此查询,我在 Join 关键字附近收到编译时错误。

join 子句中的表达式之一的类型不正确。调用“加入”时类型推断失败

标签: entity-framework-6

解决方案


我找到了答案。实际上问题出在 on 子句上。

new { mmfcl.StudentId, mmfcl.Created } 

应该等于

new { filtermmfcl.StudentId, filtermmfcl.Date }

关于数据类型和名称也是如此。

所以我改变了下面的条款并且工作正常

new { mmfcl.StudentId, mmfcl.Created } equals new { filtermmfcl.StudentId, 
filtermmfcl.Created }.

推荐阅读