使用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查询得到它?

使用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个结果在一个。

希望对你有帮助。

谢谢。