C# 使用LInq从间接子表访问数据

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

我的数据库中有下表,我通过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 = 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语法仍然是一个很好的解决方案