2016-08-11 4 views
5

私はTeamNameCurrentStatusのフィールドを持つテーブルを持っています。私は、各チームのために取得するためにLINQクエリを作っていますし、各ステータスのレコードのカウント:私はそこに行を取得する必要がありますlinqの結果に含まれるカウント= 0

var teamStatusCounts = models.GroupBy(x => new { x.CurrentStatus, x.TeamName }) 
          .Select(g => new { g.Key, Count = g.Count() }); 

このクエリの結果は、カウントが0である場合を除いてすべてのカウントを返します。特定のチームと特定のステータス(カウント= 0)のレコードはありません。

+6

を、あなたは空中からの行を作成することはできません。おそらく、あなたはすべてのチームがリストされた別々のテーブルを持っています。その場合は、両方のテーブル間で左結合を実行する必要があります。編集:あなたの要件に応じて、可能性のあるすべてのステータスを含むテーブルに参加する必要がありますもあります。 – sstan

+1

あなたはおそらく、あなたのステータステーブルとあなたのチームを正しく結合することによってモデルを作成しましたか?結果表のすべての状況データが失われます。あなたは左結合に変更するか、末尾に空の行を追加することができます –

+1

Naely、 'var teamStatusCounts = allPossibleStatusAndTeamCombinations.Select(x => new {Key = x、Count = models.Count(y => y.CurrentStatus == x.CurrentStatus && y.TeamName == x.TeamName)、}); '。 –

答えて

2

あなたはチーム名に別々のコレクションを持っている、あなたが期待している状況と結果に欠けているものを追加することができますが

//assuming allTeamNamesAndStatuses is a cross joing of all 'CurrentStatus' and 'TeamNames' 
var teamStatusCounts = models.GroupBy(x => new { x.CurrentStatus, x.TeamName }) 
          .Select(g => new { g.Key, Count = g.Count() }) 
          .ToList(); 

var missingTeamsAndStatuses = allTeamNamesAndStatuses 
        .Where(a=> 
         !teamStatusCounts.Any(b=> 
          b.Key.CurrentStatus == a.CurrentStatus 
          && b.Key.TeamName == a.TeamName)) 
        .Select(a=>new { 
         Key = new { a.CurrentStatus, a.TeamName }, 
         Count = 0 
        }); 

teamStatusCounts.AddRange(emptyGroups); 

I've created a fiddle demonstrating the answer as well

+0

これは私が必要としていたものです!ありがとう – Hanady

0

を設定し、私は最初のチームの名前とステータスを選択します:

var teams = models.Select(x => x.TeamName).Distinct().ToList(); 
var status = models.Select(x => x.CurrentStatus).Distinct().ToList(); 

既にリストのエントリがわかっている場合は、この手順をスキップできます。あなたは各チームおよび各状態のためのモデルの数を選択することができます

は次に:まあ

var teamStatusCounts = teams.SelectMany(team => states.Select(state => 
    new 
    { 
     TeamName = team, 
     CurrentStatus = state, 
     Count = models.Count(model => 
        model.TeamName == team && model.CurrentStatus == state) 
    })); 
+0

OPの問題である 'models'にはチーム名とステータスがなくても動作しません。 – sstan

+0

@sstan私はあなたが正しいと思います。私はその質問を誤解した。 「モデル」には常にチーム名と各州が少なくとも1回はあると思った。 – Koopakiller

関連する問題