gpt4 book ai didi

c# - 多列分组

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:32 26 4
gpt4 key购买 nike

我有如下表中的数据

RowId | User | Date 
--------------------------
1 A 2015-11-11 08:50:48.243
2 A 2015-11-11 08:51:01.433
3 B 2015-11-11 08:51:05.210

尝试获取如下数据:

User, Date,        Count
A 2015-11-11 2
B 2015-11-11 1

Select User,Date,Count(User) from Table1
Group By User,Date

由于日期字段涉及时间,它返回了 3 行。如何在 SQL 和 Linq 中获取它。请给我建议。

编辑:

我可以用SQL获取它

 Select User,Cast(Date as Date),Count(User) from Table1 
Group By User,Cast(Date as Date)

编辑:

添加 linq 查询

var details = db.table1.GroupBy( r => new { r.RowId,r.User,r.Date})
.Select(g => new {Name = g.Key, Count = g.Count()}).ToList();

最佳答案

对于 Linq 查询,只需执行以下操作:(您需要使用 System.Data.Entity.SqlServer 命名空间导入。

执行此 linq 查询所有计算都在服务器数据库上完成。请注意,Table1s 表示 Table1DbSetcontext 是您的 DbContext 实例。

var query = from item in context.Table1s
group item by new
{
item.User,
Year = SqlFunctions.DatePart("yyyy", item.Date),
Month = SqlFunctions.DatePart("mm", item.Date),
Day = SqlFunctions.DatePart("dd", item.Date)
} into g
select new { g.Key.User, g.Key.Year, g.Key.Month, g.Key.Day, Count = g.Count() };

然后像这样创建最终结果:

var result = query.ToList().Select(p =>
new
{
p.User,
Date = new DateTime(p.Year.Value, p.Month.Value, p.Day.Value),
p.Count
}).ToList();

其他解决方案是创建一个 SQL View ,DbContext 将使用它来检索您想要的数据。 SQL View 正文必须是您在问题中编写的 SQL。

编辑 2:DbFunctions

正如 Cetin Basoz 在评论中指出的那样,我们也可以使用 System.Data.Entity.DbFunctions。而且代码比使用 SqlFunctions 更简洁。这仅适用于 EF 6 及更高版本。使用 SqlFunctions 的版本适用于 EF 4 及更高版本。

var query = from item in context.Table1s
group item by new
{
item.User,
Date = DbFunctions.TruncateTime(item.Date)
} into g
select new { g.Key.User, g.Key.Date, Count = g.Count() };

编辑 1:这是针对 Cetin Basoz 的回答:

众所周知,使用 AsEnumerable 无法有效地完成所需的工作。他给我们的第二个解决方案是:

var grouped = from d in db.MyTable
group d by new {
User = d.User,
Date=d.Date.HasValue ? d.Date.Value.Date : (DateTime?)null} into g
select new {User=g.Key.User, Date=g.Key.Date, Count=g.Count()};

这个解决方案就是因为这个而行不通:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

关于c# - 多列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33653762/

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