选择对象的子子项
本文关键字:对象 选择 | 更新日期: 2023-09-27 18:08:17
作为linq和实体框架的新手,这让我感到困惑:
我通过实体框架创建了我的数据库的一个模型(一小部分),有三个表在两个直接的1:n关系中:Folder -> 1:n -> Contract -> 1:n ->"measurement"Point
我正在寻找一种语法,允许在我迭代的文件夹对象上开始,并返回点(如果存在)到我在文件中找到的字符串,按名称进行比较。我想完全忽略中间层合约,只找到所有合约中低一级的点。
我可以通过像这样遍历每个合约来做到这一点:
foreach (Contract contract in folder.Contract)
{
Point point = contract.Point.SingleOrDefault(p => p.Pointname == pointname);
if (point != null)
{ ... other code
}
}
我想跳过foreach over contract,但是语法不对。我试了这些:
Point point = folder.contract.SelectMany("???").Point.SingleOrDefault(p => p.Pointname == pointname)
Point point = folder.contract.All(c => c.Point.SingleOrDefault(p => p.Pointname == pointname))
都不能编译,但肯定有一个简单的方法来做到这一点?
谢谢!
拉尔夫
我相信你需要像下面的代码:
Point point = folder.Contract
.SelectMany(c => c.Point)
.SingleOrDefault(p => p.Pointname == pointname)
但似乎逻辑与您展示的有点不同,因为您检查了每个合同中是否有point != null
。