Owa*_*med 1 c# sql linq list c#-4.0
我有两张桌子。
表A
TableAId value value2
1 a b
2 aa bb
Run Code Online (Sandbox Code Playgroud)
表B
TableBId TableAId Status
1 1 success
2 1 success
3 2 failed
4 2 failed
Run Code Online (Sandbox Code Playgroud)
我想创建列表像
TableAId value value2 successCount errorCount
1 a b 2 0
2 aa bb 0 2
Run Code Online (Sandbox Code Playgroud)
这是我试图创建的查询,但我得到了错误的结果。
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();
Run Code Online (Sandbox Code Playgroud)
任何帮助我如何更正查询的帮助将不胜感激。
提前致谢
您需要先按某些内容对行进行分组,否则计数没有意义。
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")
}
Run Code Online (Sandbox Code Playgroud)
我还删除AsEnumerable了将连接、分组和计数移动到数据库的调用 - 在使用 LINQ to Objects 执行查询之前,您的查询将所有行带入应用程序内存,这在 99.9% 的情况下不是您想要的。
| 归档时间: |
|
| 查看次数: |
3129 次 |
| 最近记录: |