Entity Framework (EF) ナビゲーション プロパティでの LINQ クエリのフィルター処理についてサポートが必要です。テーブルは最初に作成されました (コード ファーストではありません)。
この問題では、The Office のキャラクターを使用してみましょう。
次のテーブルと列があるとします。
Offices
Id
Name
Location
Employees
Id
Name
EmployeeTypes
Id
Description
Employees_EmployeeTypes
Id
EmployeeId
EmployeeTypeId
テーブルには次のデータがあります。
Offices
1 North Branch PA
2 South Branch FL
3 East Branch NY
Employees
1 Jim
2 Pam
3 Oscar
4 Dwight
5 Michael
6 Angela
7 Kevin
8 Stanley
EmployeeTypes
1 Manager
2 Salesman
3 Assistant
4 Receptionist
5 Accountant
Employees_EmployeeTypes
1 1 2
2 2 4
3 3 5
4 4 2
5 5 1
6 6 5
7 7 5
8 8 2
これらのテーブルは、Visual Studio の [データベースからモデルを更新] 機能を使用して EF に取り込まれます。
すべてのエンティティはテーブル名とまったく同じように命名され、エンティティ セットは複数形になります。
Entity Name Entity Set Name
Office Offices
Employee Employees
EmployeeType EmployeeTypes
Employees_EmployeeTypes テーブルはジャンクション テーブル (多対多) であり、EF のナビゲーション プロパティに変換され、"EmployeeTypes" という名前が付けられます。以下は、その使用例です。
var employeeTypes = dbContext.Employees.Find(1).EmployeeTypes;
設定ができたので、質問に行きましょう。LINQ を使用して、ナビゲーション プロパティ "EmployeeTypes" を使用してセールスマンであるすべての従業員を選択するにはどうすればよいですか? SQL では、次のようになります。
select e.Id, e.Name
from Employees e
join Employees_EmployeeTypes e_et on e_et.EmployeeId = e.Id
join EmployeeTypes et on et.Id = e_et.EmployeeTypeId
where et.Id = 2