2017-05-09 3 views
0

EFでgroupby操作後に複数の列を選択しようとしています。ここでグループ単位で列を選択する方法

は私が何をしたいです:

this._context.dbtablename 
      .Select(u => new { u.name, u.age, u.grade }) 
      .GroupBy(x => x.grade) 
      .Select(g => new { name = g.?, age = g.??, grade = u.key, Count = g.Count() }) 

例:

name age grade 
A  12 8 
B  12 9 
C  11 10 
D  11 9 

私が持っていると思います:

name age grade 
A  12 8 
B  12 9  ----> "name" is B or D, "age" is "12" or "11", does not matter. 
C  11 10 

は、私はそれを達成することはできますか?期間中、有効な注文の

+0

グループ化されている場合はgがコレクションになります。そのようなフィールドを選択するだけの場合は、グループ – JamieD77

+0

新しい編集をご覧ください。 – derek

+0

何を試してみましたか? –

答えて

1

あなたが最初に使用できるように、各グループ化された項目は(キーとコレクションを持っている)またはfirstordefault()

this._context.dbtablename 
       .Select(u => new { u.name, u.age, u.grade }) 
       .GroupBy(a => a.grade) 
       .Select(a => new { name = a.First().name, age = a.First().age, grade = a.Key, count = a.Count() }); 

または分(各グループの最初の項目を取得する)またはMAX()

.Select(a => new { name = a.Min(b => b.name), age = a.Min(b => b.age), grade = a.Key, count = a.Count() }); 
0

後リターン番号(句)(YEARMONTH YYYYMM):

GM_ORDER.AsQueryable() 
    .Where(s => s.STATUS > -1) 
    .Select(s => new { DateOfOrder = s.CREATEDON.Date, s.ORDERID }) 
    .GroupBy(g => g.DateOfOrder.Year*100 + g.DateOfOrder.Month) 
    .OrderByDescending(o=>o.Key) 
    .Select(g => new { Period = g.Key, NrOfOrders = g.Count()}) 

出力は次のようになります。このことができます

Period NrOfOrders  
201705 13 
201704 34 
201703 42 
201702 17 
201701 17 
201612 25 
201611 34 
201610 54 
201609 135 
201608 163 
201607 110 
201606 169 
201605 100 
201604 56 
201603 19 
201602 8 
201601 6 

希望。

編集:


あなたが助ける以下のグループから複数の列を見たい場合は

。ソートするには、リスト変数に取り込んでリスト変数をソートする必要があります。

GM_ORDER.AsQueryable() 
    .Where(s => s.STATUS > -1) 
    .Select(s => new { DateOfOrder = s.CREATEDON.Date, s.ORDERID, s.STATUS }) 
    .GroupBy(g => new { YYYYMM = g.DateOfOrder.Year * 100 + g.DateOfOrder.Month, g.STATUS }) 
    .Select(g => new { Period = g.Key.YYYYMM, Status = g.Key.STATUS, NrOfOrders = g.Count() }) 
    .ToList() 
関連する問題