使用LInq访问间接子表中的数据
本文关键字:数据 LInq 访问 使用 | 更新日期: 2023-09-27 18:02:18
我在我的数据库中有以下表,我通过EF访问它们。
TestPack { id, name, type }
Sheets{ id, tp_id, date, rev }
Spool { id, sheet_id, date, rev, fabricated, installed }
意味着一个测试包有1-M张纸,每张纸有1-M个线轴。我想获得测试包中线轴总数的计数,以及制造的线轴计数,安装的线轴计数。
我如何通过Linq查询得到它?
如果我没理解错的话,你想要这样的东西
(from tp in ctx.TestPack
join st in ctx.Sheets on st.tp_id equals tp.id
join sl in ctx.Spool on sl.steet_id equals st.id
where tp.id == testPackId //you can change or delete this condition
select new {
Total = sl.Count() ,
FabricatedSpools = sl.Count(x=>x.fabricated == true),
InstalledSpools = sl.Count(x=>x.installed == true)
}).FisrtOrDefault();
或者
(from tp in ctx.TestPack
join st in ctx.Sheets on st.tp_id equals tp.id
join sl in ctx.Spool on sl.steet_id equals st.id
where tp.id == testPackId //you can change or delete this condition
select new {
Total = sl.Count() ,
FabricatedSpools = (from s in sl
where s.fabricated == true
select s.Count()),
InstalledSpools = (from i in sl
where i.installed== true
select i.Count()),
}).FisrtOrDefault();
不确定你确切的模型是什么样子的,但见下图。
var testPackID = 2;//assuming
//assuming your DbContext is ctx;
var totalSpools = ctx.Spools.Count(x => x.Sheets.tp_id == testPackID);
var fabricatedSpools = ctx.Spools.Count(x => x.Sheets.tp_id == testPackID && x.fabricated);
var installedSpools = ctx.Spools.Count(x => x.Sheets.tp_id == testPackID && x.installed);
示例数据和查询
我已经在SQL Server中生成了查询,希望你可以在LINQ中做。如果你想在LINQ中具体地让我知道。
你能说清楚你是想要结果3还是所有3个结果在一个。
希望对你有帮助。
谢谢。