目前我有像
这样的SQL查询 select tt.userId, count(tt.userId) from (SELECT userId,COUNT(userId) as cou
FROM [dbo].[users]
where createdTime> DATEADD(wk,-1,GETDATE())
group by userId,DATEPART(minute,createdTime)/5) tt group by tt.userId
现在我在数据表中有数据,我需要将上面的查询转换为LINQ并对数据表执行。我无法这样做,任何人都可以帮助我。
这就是查询的作用,它将用户分为5分钟时隙,然后计算每个用户的时隙数。
注意:我无法使用Linqer创建Linq查询,因为该表在数据库中不存在,它是一个动态创建的虚拟表。
答案 0 :(得分:2)
复杂的查询,尽我所能让它发挥作用。
var result = table.AsEnumerable().Where(u=> u.Field<DateTime>("createdTime") > DateTime.Now.AddDays(-7)) //subtract a week
.GroupBy(g=> new { userid = g.Field<string>("userId") , span = g.Field<DateTime>("createdTime").Minute })
.Select(g=> new { userid = g.Key.userid, count = g.Count()})
.GroupBy(g=> g.userid ).Select(s=> new {userid = s.Key, count = s.Count()});
工作Demo
答案 1 :(得分:1)
这个SQL可以像这样重写
Marshal.SizeOf() == 10
其对应的Linq for DataTable将是
SELECT
COUNT(U.UserId),
U.[createdTime]
FROM USERS U WHERE createdTime> DATEADD(wk,-1,GETDATE())
GROUP BY U.UserId,
DATEPART(MONTH, U.[createdTime]),
DATEPART(DAY, U.[createdTime]),
DATEPART(HOUR, U.[createdTime]),
(DATEPART(MINUTE, U.[createdTime]) / 5)
小提琴是here
答案 2 :(得分:0)
我建议使用LINQPad4。这样做很容易,这对编写LINQ查询有很大帮助。 https://www.linqpad.net/