2013-04-08 149 views
2

是新來的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)) 

兩者都無法編譯,但是確實有一個簡單的方法來做到這一點?

謝謝!

拉爾夫

回答

2

我相信你需要像下面的代碼:

Point point = folder.Contract 
        .SelectMany(c => c.Point) 
        .SingleOrDefault(p => p.Pointname == pointname) 

,但似乎邏輯是那種與大家展示一下,因爲你檢查是否在每個合同point != null的不同。

+1

正是我在找的東西。邏輯的變化不是一個問題:我只需要知道在任何地方是否需要該點。 – Ralf 2013-04-09 07:02:05