2017-01-10 105 views
1

我有兩個表。Linq加入兩個表和計數列

表A

TableAId value value2 
1  a  b 
2  aa bb 

表B

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 to對象的查詢,這是在病例99.9%不前你想要什麼。

+0

感謝解釋其工作正常 –