2012-12-26 91 views
0

使用.NET Framework 4,VB.Net,EF5,的DbContextEF5檢索嵌套的導航屬性

請考慮三個表和它們所產生的實體:

公司,員工,任務

任務有一個員工的外鍵,員工對公司具有外鍵。

在部分類公司中,如何編寫一個簡單的查詢來返回公司內的所有任務?

要獲得所有任務我現在用的這個冗長的程序:

Public ReadOnly Property Tasks As List(Of Task) 
    Get 
     Dim taskList = New List(Of Task) 

     For Each e In Employees 
      For Each t In e.Tasks 
       taskList.Add(t) 
      Next 
     Next 

     Return taskList 
    End Get 
End Property 

它的性能是可怕的。有沒有更有效的方法來做到這一點?

謝謝。

回答

0

使用LINQ的功能的SelectMany(我會嘗試在VB這裏做什麼,但你可以看看here的的的SelectMany一個例子,如果我得到這個錯誤):

taskList = _ Companies.SelectMany(Function(c) _ c.Employees.SelectMany(Function(e) e.Tasks)).ToList() 
0

由於我在寫這篇本公司類中的屬性,我想這會是:

Return Employees.SelectMany(Function(e) e.Tasks).ToList 

這個工程,是一個更有效的使用對象服務的,所以我會標記爲回答您的迴應。然而,它的表現與我使用的循環一樣差。我會把它記錄到循環生成的SQL中。我真的不想分析它,看起來 - 我確定這是一團糟。

我所做的反而是這一點,物業內:

Using context = New Entities 
    Return context.Tasks.Where(Function(t) t.Employee.CompanyID = Me.CompanyID).ToList 
End Using 

這表現相當好。雖然我不確定從Model項目中查詢上下文是否被認爲是好的做法,但我決定走這條路線。

非常感謝。