2017-02-28 5 views
0

オブジェクトobjAがIQueriable<EntityA>で、ラムダ表記を使用してC#でクエリを作成し、2つのパラメータ(StatusとWeekOfYear)でグループ化してカウントするobjAのEntityA型の各エンティティの発生結果は0とカウントされます。2つのパラメータでグループ化し、出現を考慮してlinqでカウントする

IQueriable<EntityA> objA= ... 

var group = objA.GroupBy(a => new { a.Status, a.WeekOfYear }) 
       .Select(a => new { a.Key.Status, a.Key.Week, Count = a.Count() }); 

上記のコードは私が望むものから最も近いものです。 IQueriable<int, int, int>を返します。これをExcelテーブルに簡単に挿入できます。しかし、カウントが0になると結果セットに入りませんし、Excelシートを埋めるのが難しくなります。それは私が必要とする結果を得ることは可能ですか、または私は本当にすべてのペアをチェックしなければなりません(とても優しい!!!)。

+2

*での作業のデモを得ることができますか?通常、あなたはそれらをあなたのデータに左寄せして何らかの方法で数えます... – xanatos

答えて

0

Distinct()関数を使用すると、 すべてのステータスとすべてのWeekOfYearとすべてのタプルのチェックカウントを取得できます。

コードは、このようなもので、あなたが*ステータスのx WeekOfYearのすべての組み合わせを持っているんfiddle

using System; 
using System.Linq; 
using System.Collections.Generic; 

public class Program 
{ 
    public static void Main() 
    { 
     IQueryable<Entity> data = (new List<Entity>() { 
      new Entity { Status = "1", Week = "a"}, 
       new Entity { Status = "2", Week = "c"}, 
       new Entity { Status = "3", Week = "b"}, 
       new Entity { Status = "1", Week = "a"}, 
       new Entity { Status = "1", Week = "a"} 
     }) .AsQueryable();; 



     var result = new List<EntityResult>(); 

     var statuses = data.Select(a => a.Status).Distinct().ToList(); 
     var weeks = data.Select(a => a.Week).Distinct().ToList(); 

     statuses.ForEach(s => { 
      weeks.ForEach(w => { 
       int count = data.Where(a => a.Status == s && a.Week == w).Count(); 

       result.Add(new EntityResult { Status = s, Week = s, Count= count}); 
      }); 
     }); 


     Console.WriteLine(result[0].Count); 
    } 



} 

public class Entity 
{ 
    public string Status; 

    public string Week; 
} 

public class EntityResult 
{ 

    public string Status; 

    public string Week; 

    public int Count; 
} 
+0

ステータス/週の組み合わせがすべてデータに存在しない場合はどうなりますか? –

+0

カウントが0のレコードを挿入します。 – Ygalbel

+0

いいえ、 'Status =" 5 "、Week =" a "'というエントリがあるとします。ステータス「4」の補間カウント0はありません。それが私がOPが達成しようとしていることです。 –

関連する問題