3

私はオブジェクトを持っています:

public class Ticket
{
   public string EventName {get;set;}
   public string Count {get;set;}
   public string Price {get;set;}
   ... other properties;
}

テスト用:

var tickets = new List<Ticket>();
tickets.Add(new Ticket {EventName = "Test", TicketCount = 1, Price = 100});
tickets.Add(new Ticket { EventName = "Test", TicketCount = 2, Price = 200 });
tickets.Add(new Ticket { EventName = "Test2", TicketCount = 1, Price = 50 });

次のプロパティを持つ匿名オブジェクトを取得したい:EventName, TicketCount, Price イベント名で「グループ化」。
上記の例では、結果は次のようになります。
匿名オブジェクトには2つのレコードが含まれている必要があります。

EventName = Test, TicketCount = 3, Price = 300
EventName = Test2, TicketCount = 1, Price = 50

私の未完成のコード:

var groupedByEvent = tickets.GroupBy(t => t.EventName);
var obj = new {EventName = seatsByEvent.Select(t=>t.Key), TicketCount = seatsByEvent.Sum(???)}

これを解決する方法は?

4

3 に答える 3

15
var result = tickets.GroupBy(t => t.EventName)
                    .Select(g  => new { 
                             EventName = g.Key, 
                             TicketCount = g.Sum(t => t.TicketCount), 
                             Price = g.Sum(t => t.Price)
                    });

foreach(var x in result)
     Console.WriteLine("EventName = {0}, TicketCount = {1}, Price = {2}"
                       , x.EventName , x.TicketCount , x.Price);
于 2012-09-04T08:20:16.913 に答える
4
var groupedByEvent = tickets.GroupBy(t => t.EventName);

var obj = groupByEvent.Select(group => new {
   EventName = group._Key,
   TicketCount = group.Sum(x => x.TicketCount),
   Price = group.Sum(x => x.Price)
});
于 2012-09-04T08:19:34.203 に答える
4

まず、POCOクラスを正しく設定する必要があります。

public class Ticket
{
  public string EventName {get;set;}
  public string Count {get;set;}
  public int Price {get;set;}
  public int TicketCount { get; set; }
}

Priceである必要があり、intであり、また、TicketCountのように、それは必然的に合計になります。

すると、linqクエリは次のようになります。

var events = tickets.GroupBy(t => t.EventName).Select(g => new 
{
  EventName = g.Key,
  TicketCount = g.Sum(t => t.TicketCount),
  Price = g.Sum(t => t.Price)
});
于 2012-09-04T08:30:05.067 に答える