2

次のシナリオでは、LINQ を使用して 1 時間あたりおよび 1 日あたりの平均を取得するにはどうすればよいですか。

public class Sales
{
    public Sales()
    {

    }

    public string Name { get; set;}
    public DateTime SaleDate { get; set;}
    public int Price { get; set;}           
}

ICollection<Sales> myCollection = new List<Sales>();

myCollection から次のように平均を取得できることはわかっています。

double average = myCollection.Average(a => a.Price);

私が必要とするのは、1 日あたりの平均を取得することです。

date         average
24.09.2013   1243
25.09.2013   1278
26.09.2013   2587

次に、特定の日付の 1 時間あたりの平均:

hours              average
00:00 - 01:00      125
01:00 - 02:00      127
02:00 - 03:00      158

など...

4

3 に答える 3

6

次の方法で日付ごとに平均化できます。

var results = myCollection.GroupBy(i => i.SaleDate.Date)
                          .Select(g => new {Date = g.Key, Average = g.Average(a => a.Price) });

foreach(var result in results)
{
       Console.WriteLine("{0}  {1}", result.Date, result.Average);
}

特定の日付の時間ごとの平均を実行するには:

var results = myCollection.Where(i => i.SaleDate.Date == theDate)
                          .GroupBy(i => i.SaleDate.Hour)
                          .Select(g => new {Hour = g.Key, Average = g.Average(a => a.Price) });

foreach(var result in results)
{
   var hourStart = TimeSpan.FromHours(result.Hour);
   var hourEnd = TimeSpan.FromHours(result.Hour + 1);
   Console.WriteLine("{0:hh\:mm} - {1:hh\:mm}  {1}", hourStart, hourEnd, result.Average);
}
于 2013-09-27T20:34:56.077 に答える
3

日付別

var results = myCollection
                .GroupBy(i => i.SaleDate.Date)
                .Select(x => new { Date = x.Key, Avg = x.Average(y => y.Price)});

日付と時間で平均を計算するには:

var results = myCollection
                .GroupBy(item => new {
                             Date = item.SaleDate.Date, 
                             Hour = item.SaleDate.Hour
                })
                .Select(x => new {
                             Date = x.Key.Date,
                             Hour = x.Key.Hour,
                             Avvg = x.Average(a => a.Price)
                });
于 2013-09-27T20:33:11.353 に答える