2017-01-10 7 views
1

私は2つのテーブルがあります。Linqは2つのテーブルを結合し、カウントの列は

TableAの

TableAId value value2 
1  a  b 
2  aa bb 

TableBの

TableBId TableAId Status 
    1  1  success 
    2  1  success 
    3  2  failed 
    4  2  failed 

私はこの

TableAId value value2 successCount errorCount 
    1  a  b  2   0 
    2  aa bb  0   2 

よう リストを作成しようとしています私が作成しようとしているクエリですが、間違った結果が出ています。

var query = (from a in db.TableA.AsEnumerable() 
       join b in db.TableB.AsEnumerable() 
       on a.TableAId equals b.TableAId 
       select 
       new 
       { 
        TableAId = a.TableAId, 
        value = a.value, 
        value2 = a.value2, 
        successCount = b.Status.Count(t => t.ToString() == "success"), 
        errorCount = b.Status.Count(t => t.ToString() == "failed") 
       }).ToList(); 

どのように私はクエリを修正することができますどのように助けていただければ幸いです。

おかげで、事前

+0

このクエリを実行した後にどのような結果が得られますか? – Mostafiz

答えて

4

にあなたはそれ以外の場合はカウントは意味がない、最初に何かして、グループにあなたの行を必要とします。

from a in db.TableA 
join b in db.TableB on a.TableAId equals b.TableAId 
group b by a into g 
select new 
{ 
    TableAId = g.Key.TableAId, 
    value = g.Key.value, 
    value2 = g.Key.value2, 
    successCount = g.Count(t => t.Status == "success"), 
    errorCount = g.Count(t => t.Status == "failed") 
} 

私もグループ化し、データベースに数え、参加移動するAsEnumerable呼び出しを削除 - あなたのクエリがオブジェクトにLINQを使用してクエリを実行する前に、アプリケーションのメモリにすべての行をもたらし、例99.9%にされていませんあなたが欲しいもの。

+0

説明はありがたいです。 –

関連する問題