0

.Net Framework 4、VB.Net、EF5、DbContextを使用する

3つのテーブルとそれらによって生成されたエンティティを検討してください。

会社、従業員、タスク

タスクには従業員への外部キーがあり、従業員には会社への外部キーがあります。

部分クラスの会社で、会社内のすべてのタスクを返す簡単なクエリを作成するにはどうすればよいですか?

すべてのタスクを取得するために、私は現在、この長い時間のかかるルーチンを使用しています。

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

そのパフォーマンスはひどいです。これを行うためのより効率的な方法はありますか?

ありがとうございました。

4

2 に答える 2

0

LINQのSelectMany関数を使用します(ここではVBで試してみますが、これを間違えた場合は、SelectManyの例をここで探すことができます):

taskList = _ Companies.SelectMany(Function(c) _ c.Employees.SelectMany(Function(e) e.Tasks)).ToList()
于 2012-12-27T15:30:57.443 に答える
0

これをCompanyクラス内のプロパティに書き込んでいるので、次のようになると思います。

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

これは機能し、Object Servicesをより効率的に使用できるため、回答を回答としてマークします。

ただし、使用していたループと同じようにパフォーマンスが低下します。ループによって生成されたSQLにチョークで書きます。私は本当にそれをプロファイリングして見る気がしません-それは混乱していると確信しています。

代わりに、プロパティ内でこれを実行しました。

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

これは非常にうまく機能します。モデルプロジェクト内からコンテキストをクエリするのが良い習慣であるかどうかはわかりませんが、このルートを使用することにしました。

どうもありがとう。

于 2012-12-27T17:39:32.787 に答える