【问题标题】:Linq average in Dictionary字典中的 Linq 平均值
【发布时间】:2014-04-24 08:56:03
【问题描述】:

我有一本字典,想要获取特定时间范围内的平均出勤率。 到目前为止,我有这项工作,它给了我出席人数:

var vCounts = (from pil in planInfoList
               from s in pil.Value
               where (s.CheckInActualUtc.TimeOfDay >= TStart 
                   && s.CheckInActualUtc.TimeOfDay <= TEnd)
               select s).Count();

s.CheckInActualUtc 是多个日期。

如何获得出席人数的平均值? 我已经尝试过了,但这是不行的:

var vAverage = from pil in planInfoList
               from s in pil.Value
               where (s.CheckInActualUtc.TimeOfDay >= TStart 
                   && s.CheckInActualUtc.TimeOfDay <= TEnd)
               group s by s.CheckInActualUtc.DayOfYear into g
               select new { av = g.Average() }; 

【问题讨论】:

  • group s.Value by ... 也许?
  • 您的意思是要获得每天平均数的组合平均数还是仅获得总平均数(在这种情况下可以省略分组依据)
  • 请注意:你可以像planInfoList.Values那样简单,而不是双重from
  • 我想要一个总平均值。
  • Average 只有在可数类型中。

标签: c# linq dictionary


【解决方案1】:

如果您的意思是,您需要平均每天的参加人数:

var vAverage = (from pil in planInfoList
               from s in pil.Value
               where (s.CheckInActualUtc.TimeOfDay >= TStart 
                   && s.CheckInActualUtc.TimeOfDay <= TEnd)
               group s by s.CheckInActualUtc.DayOfYear into g
               select g.Count()).Average(); 

【讨论】:

  • 我不想要每天的结果,而是总平均值。如果结果 i 0,您的解决方案也会出错。 select g.Count()).DefaultIfEmpty().Average();会解决的。
  • 究竟是哪个字段的平均值?除非 s 本身是一个值,否则它将类似于 (from pil in planInfoList from s in pil.Value where (s.CheckInActualUtc.TimeOfDay &gt;= TStart &amp;&amp; s.CheckInActualUtc.TimeOfDay &lt;= TEnd) select s.SomeValue).Average();
  • 或每个其他组的出席人数?比如我们每个与会者?如果不是这个或上面的,我不明白你想要什么。
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多