选择对象

问题描述:

是新来的LINQ和Entity Framework这种困惑的细分子项我:选择对象

我在创建通过实体框架我的数据库(一个微小部分的)模型,用三个表两连胜降1:n的关系:文件夹 - > 1:N - >合同 - > 1:N - > “测量”

我要寻找一种语法,允许开始我迭代一个文件夹对象,并将其返回到我在文件中找到的字符串(如果存在),并按名称进行比较。我想完全忽视中层合同,只是在所有合同中找到低一级的点。

我可以通过这样的每一份合同迭代做到这一点:

foreach (Contract contract in folder.Contract) 
{ 
    Point point = contract.Point.SingleOrDefault(p => p.Pointname == pointname); 
    if (point != null) 
    { ... other code 
    } 
} 

我想跳过合同的foreach,但我不能得到正确的语法。我试过这些:

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的不同。

+1

正是我在找的东西。逻辑的变化不是一个问题:我只需要知道在任何地方是否需要该点。 – Ralf 2013-04-09 07:02:05