使用 Entity Framework 分组

Group by using the Entity Framework

我每天每半小时从市场收到 48 个文件。这些文件的开始时间为 属性。我正在使用 Entity Framework 在 Web 应用程序中查看这些文件,因为这些文件有英国时间,但我在欧洲市场工作,交易日从前一天晚上 11 点开始,所以我想根据这些将这些组合在一起交易日。

在 SQL 中,我可以通过以下方式完成此操作:

select cast(DATEADD(hour, 1, START_TIME) as date), count(cast(START_TIME as date)) 
from imbalancecost
group by cast(DATEADD(hour, 1, START_TIME) as date)  

我试图通过以下尝试在 C# 中获得类似的结果:

IEnumerable<IGrouping<DateTime, ImbalanceCost> imbalanceCost = db.ImbalanceCost.GroupBy(ic => ic.START_TIME).ToArray();

有什么方法可以先将小时添加到我的分组中,然后仅使用这个新计算值的日期部分吗?

如果我没理解错的话,您想在开始时间上加上一个小时并按日期部分分组。可以按如下方式完成:

var imbalanceCost = db.ImbalanceCost
    .Select(x => EntityFunctions.AddHours(x.START_TIME, 1))
    .GroupBy(ic => ic.Value.Date)
    .ToArray();

Is there any means of first adding the hour onto my grouping and then using only the date part of this new calculated value?

在 LINQ to Entities (EF6) 中,分别使用规范函数 DbFunctions.AddHours and DbFunctions.TruncateTime:

db.ImbalanceCost.GroupBy(ic => 
    DbFunctions.TruncateTime(DbFunctions.AddHours(ic.START_TIME, 1)).Value)

注意.Value(或强制转换为DateTime)是为了使规范方法返回的结果DateTime而不是DateTime?,以防ic.START_TIME 不可为空,因此您知道结果也不可为空。