2010-07-24 60 views
3

我有一個C#DataTable,裏面有5列。我只關心DataTable中的兩列。我關心的兩列稱爲「CreateDate」和「ID」。它們是DateTime和字符串。 DateTime表示票據提交的日期。該ID唯一代表一張票。用LINQ查詢分組數據

我想寫一個LINQ語句,顯示每個日期創建的票數。但是,我無法弄清楚這是如何做到的。有人可以告訴我如何做到這一點?

謝謝!

回答

4

我相信這樣的事情會工作:

var result = from ticket in TicketTable 
group ticket by ticket.CreateDate.Date into g 
select new {Date = g.Key, Count = g.Count() }; 
+0

+1。正確的解決方案,假設'CreateDate'不包含確切的時間。 – 2010-07-24 21:05:29

+0

CreateDate是一個完整的DateTime對象。這怎麼解決? – user336786 2010-07-24 21:06:41

+0

我的解決方案使用.Date 處理該問題http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx – recursive 2010-07-24 21:09:37

0
class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Ticket> tickets = new List<Ticket>(); 

     tickets.Add(new Ticket() { CreateDate = DateTime.Now, Id = 1 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(1), Id = 2 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(1), Id = 3 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(2), Id = 4 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(2), Id = 5 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(3), Id = 6 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(3), Id = 7 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(4), Id = 8 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(5), Id = 9 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(6), Id = 10 }); 
     tickets.Add(new Ticket() { CreateDate = DateTime.Now.AddDays(7), Id = 11 }); 

     var query = tickets. 
        GroupBy(t => t.CreateDate.Date). 
        Select(g => new { Date = g.Key, Count = g.Count() }); 

     foreach (var g in query) 
     { 
      Console.WriteLine("{0} - {1}", g.Date, g.Count); 
     } 

     /* Outputs: 
      7/24/2010 12:00:00 AM - 1 
      7/25/2010 12:00:00 AM - 2 
      7/26/2010 12:00:00 AM - 2 
      7/27/2010 12:00:00 AM - 2 
      7/28/2010 12:00:00 AM - 1 
      7/29/2010 12:00:00 AM - 1 
      7/30/2010 12:00:00 AM - 1 
      7/31/2010 12:00:00 AM - 1 */ 
    } 

    class Ticket 
    { 
     public int Id { get; set; } 
     public DateTime CreateDate { get; set; } 
    } 
}