2010-12-23 1 views
0

私は、次のフィールドを持つテーブルがある:LINQグループ(/オープン比をクリック)

  1. アクション=>クリック/オープン
  2. のDateTime =>日付と時刻のアクション が
  3. を発生しました

例:

アクション|日時


  1. クリック| 3/12/2010 3:00 AM
  2. をクリックしてください| 3/12/2010 3:12 AM
  3. open | 3/12/2010 3:34 AM
  4. をクリックしてください| 2010/03/12 4:12 AM
  5. をクリックしてください| 2010年3月13日13:12

など。

私はクリック数を持っており、毎時間開くように私は時間によってグループにこれらを必要としています。

どうすればいいですか?あなたが探しているものということ

2 - Click - 3 
1 - Open - 3 
1 - Click - 4 
1 - Click - 13

: 感謝

答えて

0

私はそうのようにそれを解決:

 List<MySummary> summary = 
      entries.Select(i => new { i, dt = i.Date }).GroupBy(
       @t => new { date = @t.dt.Date, time = @t.dt.Hour }, @t => @t.i).Select(
        g => 
        new MySummary() 
         { 
          Date = g.Key.date.AddHours(g.Key.time), 
          Opens = g.Count(x => x.Type == "Open"), 
          Clicks = g.Count(x => x.Type == "Click") 
         }).ToList(); 

あなたたちは、これは正しいデータを取得it..itのルックスからincorrect..butていると思う場合は私に知らせてください。

モデル:

public class MySummary 
{ 
    public DateTime Date { get; set; } 

    public int Opens { get; set; } 

    public int Clicks { get; set; } 
} 
1

あなたは、このラムダ

var data = new[] 
        { 
         new { Actn = "click", tm = "3/12/2010 3:00AM" }, 
         new { Actn = "click" , tm = "3/12/2010 3:12AM"}, 
         new { Actn = "open" , tm = "3/12/2010 3:34AM"}, 
         new { Actn = "click" , tm = "3/12/2010 4:12AM"}, 
         new { Actn = "click" , tm = "3/13/2010 1:12PM"} 
        }; 

      var groupby = data.GroupBy(r => new { Convert.ToDateTime(r.tm).Hour, r.Actn }); 

      foreach (var group in groupby) 
      { 
       Console.WriteLine("{0} = {1}", group.Key, group.Count()); 
      } 
4
var poo = new[] 
       { 
        new 
         { 
          Type = "Click", 
          Time = DateTime.Parse("March 12, 2010 3:00AM") 
         }, 
        new 
         { 
          Type = "Click", 
          Time = DateTime.Parse("March 12, 2010 3:12AM") 
         }, 
        new 
         { 
          Type = "Open", 
          Time = DateTime.Parse("March 12, 2010 3:34AM") 
         }, 
        new 
         { 
          Type = "Click", 
          Time = DateTime.Parse("March 12, 2010 4:12AM") 
         }, 
        new 
         { 
          Type = "Click", 
          Time = DateTime.Parse("March 13, 2010 1:12PM") 
         } 
       }; 

var result = from s in poo 
       group s by new {s.Type, s.Time.Hour} into p 

       select new 
         { 
          p.Key.Type, 
          p.Key.Hour, 
          Count = p.Count() 
         }; 

foreach (var s in result) 
{ 
    Console.WriteLine(s.Count + " - " + s.Type + " - " + s.Hour); 
}

を使用して出力のように行うことができますか?

+0

慎重に、私は確かではないが、私はs.time.hourによってグループが日ごとに、日常からのすべての3 o'clocksのグループではなく、それぞれの時間を返すと思いますけれども。 – Void