gpt4 book ai didi

c# - Entity Framework 按日期分组并返回新类

转载 作者:太空狗 更新时间:2023-10-29 18:25:18 25 4
gpt4 key购买 nike

我正在使用 .NET 和 Entity Framework 。我想按没有时间部分的日期对表格进行分组。

我上课了:

public sealed class QueryItem {
public int Year { get; set; }
public int Month { get; set; }
public int Day { get; set; }
}

和方法(我用的是BLToolkit,如果你想知道什么是DbManager):

protected override IQueryable<QueryItem> InitiateQuery() {
return
from query in DbManager.GetTable<SomeTableModel>()
group query by new { Year = query.CreationDate.Year, Month = query.CreationDate.Month, Day = query.CreationDate.Day }
into list1
select new QueryItem {Year = list1.Key.Year, Month = list1.Key.Month, Day = list1.Key.Day};
}

在此方法中,linq 转换为此 SQL 查询:

SELECT
[query].[CreationDate]
FROM
[SomeDatabase.SomeTable] [query]
GROUP BY
DatePart(Year, [query].[CreationDate]),
DatePart(Month, [query].[CreationDate]),
DatePart(Day, [query].[CreationDate]),
[query].[CreationDate]

这是错误的查询,因为它不只按日期分组。

但是如果我使用这段代码(它不可用,我需要返回一个类对象):

var result =
from query in DbManager.GetTable<SomeTableModel>()
group query by new { Year = query.CreationDate.Year, Month = query.CreationDate.Month, Day = query.CreationDate.Day }
into list1
select list1;

它将被翻译成这样:

SELECT
[t1].[c1] as [c11],
[t1].[c2] as [c21],
[t1].[c3] as [c31]
FROM
(
SELECT
DatePart(Year, [selectParam].[CreationDate]) as [c1],
DatePart(Month, [selectParam].[CreationDate]) as [c2],
DatePart(Day, [selectParam].[CreationDate]) as [c3]
FROM
[SomeDatabase.SomeTable] [selectParam]
) [t1]
GROUP BY
[t1].[c1],
[t1].[c2],
[t1].[c3]

这是正确的查询。

我想 Entity Framework 试图优化我的查询或类似的东西,这就是我得到错误查询的原因。

我说的对吗?我这样做的方式正确吗?我应该怎么做(可能使用直接 SQL 查询或其他方式)?

最佳答案

使用EntityFunctions就简单多了* 此处:

var result =
from query in DbManager.GetTable<SomeTableModel>()
group query by EntityFunctions.TruncateTime(query.CreationDate)
into list1
select list1;

* DbFunctions从 Entity Framework 6 开始。

关于c# - Entity Framework 按日期分组并返回新类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13539224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com