给定下表:
仪器日志
InstrumentLogId (PK, int, not null)
InstrumentId (FK, int, not null)
LogDate (datetime, not null)
Action (string, not null)
仪器
InstrumentId (PK, int, not null)
CountyId (FK, int, not null)
县
CountyId (PK, int, not null)
StateFips (FK, int, not null)
Name (string, not null)
状态
StateFips (PK, int, not null)
Name (string, not null)
我需要弄清楚如何使用实体框架编写这个 SQL 查询:
select s.StateName, count(*) as total
from instruments as i
join counties as c on i.CountyID = c.CountyID
join states as s on s.StateFIPS = c.StateFIPS
where i.InstrumentID in
(select i1.InstrumentId from InstrumentLogs as i1 where i1.action = 'review' and
i1.logdate in (select max(logdate) from instrumentlogs as i2 where i1.instrumentid
=i2.InstrumentID group by i2.instrumentid))
group by s.StateName
我尝试了一些类似的东西:
_context.Instruments.Include(i => i.County.State)
.Where(i => _context.Logs.Where(l => l.Action == 'review'
&& _context.Logs.Where(l2 => l2.InstrumentId == l.InstrumentId).Max(l2 => l2.LogDate) == l.LogDate).GroupBy(i => i.County.State.Name)
.Select(g => new { State = g.Key.Name, Total = g.Count() });
但是,EF 不喜欢这样。我以错误告终,指出仅支持原始类型或枚举类型。
谢谢你的帮助。