2017-01-10 106 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

感谢解释其工作正常 –