在 Linq2DB 中仅按日期分组
Grouping by just the date in Linq2DB
我正在尝试在 C# 中使用 Linq2Db 生成 sql 查询。我要生成的查询是这样的:
SELECT
cast([t1].[StartTime] as date) as [StartTime1],
Count(*) as [WebpageVisits],
Sum([t1].[PageCount]) as [SumOfViewsOfPages]
FROM
[myserver].[dbo].[TrackData] [t1]
GROUP BY cast([t1].[StartTime] as date)
我尝试使用的 Linq 代码是这样的:
var query = from table in dataContext.TrackData(tablePath)
group table by new { table.StartTime.Date } into grp
select new { day = grp.Key.Date, numVisitors = grp.Count(), totalPageViews = grp.Sum(table2 => table2.PageCount)};
返回的查询是
-- SqlServer.2008
SELECT
[t1].[StartTime],
Count(*) as [c1],
Sum([t1].[PageCount]) as [c2]
FROM
[myserver].[dbo].[TrackData] [t1]
GROUP BY
Convert(Date, [t1].[StartTime]),
[t1].[StartTime]
为什么会出现额外的 [t1].[StartTime]?这导致结果不根据日期分组。如何生成我尝试使用 Linq 生成的 SQL 查询?
尝试分组删除匿名类型:
group table by table.StartTime.Date into grp
如果您想按多列分组,您应该使用匿名类型。我试过你在 LinqPad 中查询,我无法模拟相同的行为,但这是你以后应该遵循的原则
我正在尝试在 C# 中使用 Linq2Db 生成 sql 查询。我要生成的查询是这样的:
SELECT
cast([t1].[StartTime] as date) as [StartTime1],
Count(*) as [WebpageVisits],
Sum([t1].[PageCount]) as [SumOfViewsOfPages]
FROM
[myserver].[dbo].[TrackData] [t1]
GROUP BY cast([t1].[StartTime] as date)
我尝试使用的 Linq 代码是这样的:
var query = from table in dataContext.TrackData(tablePath)
group table by new { table.StartTime.Date } into grp
select new { day = grp.Key.Date, numVisitors = grp.Count(), totalPageViews = grp.Sum(table2 => table2.PageCount)};
返回的查询是
-- SqlServer.2008
SELECT
[t1].[StartTime],
Count(*) as [c1],
Sum([t1].[PageCount]) as [c2]
FROM
[myserver].[dbo].[TrackData] [t1]
GROUP BY
Convert(Date, [t1].[StartTime]),
[t1].[StartTime]
为什么会出现额外的 [t1].[StartTime]?这导致结果不根据日期分组。如何生成我尝试使用 Linq 生成的 SQL 查询?
尝试分组删除匿名类型:
group table by table.StartTime.Date into grp
如果您想按多列分组,您应该使用匿名类型。我试过你在 LinqPad 中查询,我无法模拟相同的行为,但这是你以后应该遵循的原则