1

我正在寻找一种在 C# LINQ 中使用 lambda 格式每秒对记录进行分组的方法。在我的搜索中,我还没有找到一个好的方法来做到这一点。

SQL查询如下。

select count(cct_id) as 'cnt'
  ,Year(cct_date_created) 
  ,Month(cct_date_created) 
  ,datepart(dd,cct_date_created) 
  ,datepart(hh,cct_date_created) 
  ,datepart(mi,cct_date_created) 
  ,datepart(ss,cct_date_created) 
from ams_transactions with (nolock)
where cct_date_created between dateadd(dd,-1,getdate()) and getdate()
group by 
  Year(cct_date_created)
  ,Month(cct_date_created)
  ,datepart(dd,cct_date_created)
  ,datepart(hh,cct_date_created)
  ,datepart(mi,cct_date_created)
  ,datepart(ss,cct_date_created)

现在我能来的最接近的是以下,但它没有给我正确的结果。

var groupedResult = MyTable.Where(t => t.cct_date_created > start 
                                    && t.t.cct_date_created < end)
                           .GroupBy(t => new { t.cct_date_created.Month,
                                               t.cct_date_created.Day,
                                               t.cct_date_created.Hour,
                                               t.cct_date_created.Minute, 
                                               t.cct_date_created.Second })
                           .Select(group => new { 
                                                 TPS = group.Key.Second
                                                });

这似乎是按秒分组,但不考虑日期范围内的每一分钟,而是日期范围内每分钟的那一秒。要获得每秒事务数,我需要它分别考虑每月、每小时、每天、每分钟的每一分钟。

目标是从这个分组列表中提取最大值和平均值。任何帮助将不胜感激 :)

4

1 回答 1

2

目前您选择的是第二个,而不是计数 - 为什么?(您也无缘无故地使用匿名类型 - 只要您有一个属性,请考虑只选择该属性而不是将其包装在匿名类型中。)

因此,将您的更改Select为:

 .Select(group => new { Key = group.Key,
                        Transactions = group.Count() });

或者分别拥有所有关键属性:

 .Select(group => new { group.Month,
                        group.Day,
                        group.Hour,
                        group.Minute,
                        group.Second,
                        Transactions = group.Count() });

(顺便说一句,你绝对不需要年份部分吗?它在你的 SQL 中......)

于 2012-09-23T06:18:05.723 回答