C# 使用LInq从间接子表访问数据
我的数据库中有下表,我通过EF访问它们C# 使用LInq从间接子表访问数据,c#,sql-server,linq,entity-framework,C#,Sql Server,Linq,Entity Framework,我的数据库中有下表,我通过EF访问它们 TestPack { id, name, type } Sheets{ id, tp_id, date, rev } Spool { id, sheet_id, date, rev, fabricated, installed } 这意味着一个测试包有1-M个片材,每个片材有1-M个线轴。我想得到测试包中的总线轴数,以及制造的线轴数,安装的线轴数 我如何通过Linq查询获得这些信息?不确定确切的模型是什么样的,但请参见下文 var testPackID
TestPack { id, name, type }
Sheets{ id, tp_id, date, rev }
Spool { id, sheet_id, date, rev, fabricated, installed }
这意味着一个测试包有1-M个片材,每个片材有1-M个线轴。我想得到测试包中的总线轴数,以及制造的线轴数,安装的线轴数
我如何通过Linq查询获得这些信息?不确定确切的模型是什么样的,但请参见下文
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个结果都变成一个结果
希望这有帮助
谢谢。如果我没听错的话,你想要这样的东西
(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();
请添加一些代码,解释好你的答案,指向链接可能不是最好的选择。我无法加载您提供的解决方案。您需要在集合之间加入以在后台文件中获得TestPackIdcollection@MrinalKamboj不一定。。他还没有向我们展示模型,但我只是假设假脱机是按sheet_id与sheets相关的,而sheets是按tp_id与TestPack相关的。他已经指定了三个表之间的关系,它们之间有FK约束,在选择过滤TestPack id上的数据之前还需要什么,这是OP要求。尽管如此,使用sql语法仍然是一个很好的解决方案