c# - Linq 查询未编译
问题描述
我写了一个目前无法编译的小型 linq 查询
var count = (from data in Data
join data2 in Data on data.UserId equals data2.UserId
group data2 by data2.UserId into gr
where gr.Max(b => b.Date) == data.Date // data variable not available
select data.Id).Count(); // data variable not available
我的问题是我不能在子句之后重用数据变量。group by
我怎样才能做到这一点?
有关信息,这是SQL
我要转换的查询。
SELECT COUNT(data.Id)
FROM Data data
INNER JOIN
(SELECT UserId, MAX(Date) AS MaxDate
FROM Data
GROUP BY UserId) g
ON data.UserId = g.UserId
AND data.Date = g.MaxDate
解决方案
正如我在评论中提到的,您的 linq 查询的顺序group by
与join
您的 SQL 查询不匹配。
如果您喜欢查询语法,您的查询可能如下所示:
(from d in Data
join g in
(from d in Data
group d by d.UserId
into gr
select new { UserId = gr.Key, MaxDate = gr.Max(d => d.Date) })
on new { ID = d.UserId, Date = d.Date} equals new { ID = g.UserId, Date = g.MaxDate }
select d.Id)
.Count();
但它非常丑陋且过于复杂。如果您要在内存中执行此操作(linq-to-objects),则需要注意大量分配。
推荐阅读
- java - 努力创建新的 HashMap 函数
- amazon-sns - 使用 AWS 的自定义电子邮件地址
- python - 如何使用 Python Selenium 在网站上查找特定文本?
- webstorm - 我可以隐藏 WebStorm 生成的 .idea 文件夹吗?
- javascript - 在 Bootstrap 选项卡中显示来自 2 个表的数据
- python - Python:使`input`读写自定义文件描述符
- python - 直接搜索文件和搜索使用“read()”函数获得的字符串有什么区别
- python - 导入包时文件名只能是一个单词吗?
- apache - htaccess - remove index.php and keep a variable without key
- java - 更改对象的特定注释字段的值,该对象用作某个对象中多个字段的类型 - Jackson Object Mapper Serialize