加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq to Entity Group by Date

发布时间:2020-12-15 21:16:52 所属栏目:百科 来源:网络整理
导读:做了很多研究,但仍然有一个艰难的研究.考虑具有“CreatedOn”,“Amount”,“Type”的事务表的数据库.我需要能够进行实体查询以获得按不同日期粒度(月/日等)组合在一起的特定类型的事务. 想象一下一张桌子: 2011/1/22 $300 Deposit2011/2/18 $340 Deposit201
做了很多研究,但仍然有一个艰难的研究.考虑具有“CreatedOn”,“Amount”,“Type”的事务表的数据库.我需要能够进行实体查询以获得按不同日期粒度(月/日等)组合在一起的特定类型的事务.

想象一下一张桌子:

2011/1/22   $300   Deposit
2011/2/18   $340   Deposit
2011/3/6   $200    Other
2011/3/6   $100    Deposit
2011/3/7   $50     Deposit

我可以有一个查询,它将按月分组所有存款,以便它可以产生:

2011-1 $300 1deposit
2011-2 $340 1deposit
2011-3 $150 2deposits

那么我如何使这个查询适应白天而不是月?

这是我当前的代码块,但是我得到了一个内部linq异常

Can’t group on A1

var result = context.TransactionEntities.Where(d => d.Type == "Deposit")                                     
                    .GroupBy(g => new { g.CreatedOn.Year,g.CreatedOn.Month })
                    .Select(g => new
                           {
                                 DateKey = g.Key,TotalDepositAmount = g.Sum(d => d.Amount),DepositCount = g.Count()
                            }).ToList();

注意:我目前正在使用MySql连接器,我读过可能这是一个错误?

解决方法

Func<DateTime,object> groupByClause;
if (groupByDay) groupByClause = date => date.Date;
else if (groupByMonth) groupByClause = date => new { date.Year,date.Month};
else throw new NotSupportedException("Some option should be chosen");

var result = data.Where(d => d.Type == "Deposit")
                 .GroupBy(groupByClause)
                 .Select(g => new { DateKey = g.Key,DepositCount = g.Count(),});

当然应该检查linq-2-entities是否会接受它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读