使用 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
不可为空,因此您知道结果也不可为空。
我每天每半小时从市场收到 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
不可为空,因此您知道结果也不可为空。