我正在将一些 sql 存储过程逻辑(它将返回数据集中的多个表)移植到使用 linq 查询的实体框架强类型对象。
基本上我需要表 A、B 和 C 中的数据,其中 C 对 B 有一个外键,而 B 对 A 有一个外键。但我不希望每个 C 都对 B 有 FK,只希望 C 有一定的约束 X。
所以基本上,存储过程基本上说
TableA = select from A where A.AID = AIDPassedIn
TableB = select from B where B.AID = AIDPassedIn
TableC = select from TableB where TableB.XID = XIDPassedIn
return new DataSet(TableA, TableB, TableC);
//yes this is gross and confusing, thus our current efforts
实体框架几乎让这变得超级简单,就像这样
A.Include("B.C").Where(a => a.AID == AIDPassedIn)
我唯一的问题是这不包括 C 表上的约束 X。我读过很多文章,但我读过的所有内容都表明我可以添加到 where 子句中,这将过滤我最终得到的 A 对象。我应该只得到一个 A 对象,不管它的孩子的属性如何。我想要的是带有 AIDPassedIn 的 A,以及它的所有子 B,以及与约束 X 匹配的所有 B 的子 C。
我觉得这是我有史以来最糟糕的措辞问题之一,但我有点困惑。任何帮助都会非常感谢!