Linqのどのような仕組みがこの状況のためのものなのか分かりません。それを手動で行います。Linq to Sql、1つのクエリでネストされたデータ構造を取得する
------------Employees-------------
EmployeeID Name -other columns-
---------EmployeeSkills-----------
EmployeeID Skill -other columns-
ので、各従業員が0以上のスキルを持つことができます。
はのは、私は2つのテーブルがあるとしましょう。従業員からの
私のテーブルの関係が設定されているので、私はちょうど従業員テーブルをforeachの可能性が私の目標は、メモリ内のデータ構造にこの情報を描画することですが
class StaticEmployee
{
int EmployeeID;
string Name;
List<string> Skills;
}
List<StaticEmployee> employees = (???).ToList();
1つのSQLクエリを使用して(でdb.Employeesは従業員を選択しますが、EmployeeSkillsプロパティにアクセスすると、そのデータが最初のクエリで返されなかったため、すべての従業員レコードに対して別個のクエリが実行されます。また
、と私は、これまでSQLが懸念されるように行わ欲しいものを私は、左にクエリを実行している参加:
SELECT Employees.EmployeeID, Employees.Name, EmployeeSkills.Skill FROM Employees LEFT JOIN EmployeeSkills ON Employees.EmployeeID=EmployeeSkills.EmployeeID
私に私のリストを取得しますが、私は手動で照合する必要があることスキルが2の従業員は2行を返すので、これを私のリストに入れてください。 これを行うLinq操作はありますか?
from employee in db.Employees
select new
{
EmployeeID = employee.EmployeeID,
Name = employee.Name,
Skills = new List(
from employeeSkill in employee.EmployeeSkills
select employeeSkill.skill
)
}
これはよさそうだ - より良い、LoadWithが提供します私が知らなかった機能を備えた私は存在していた。 Upvoted。 これを確定するには、EmployeeSkillsの列の一部を返す方法(2番目の方法)がありますか(スキル列が必要です。その表の各列ではありません) – David
Nevermind、 "Skills = employee.EmployeeSkills"を "Skills = employee.EmployeeSkills.Select(s => Skill)"に変更しました。マークされた回答。 – David
補足として、DataOptionsをdatacontextの最初のものとして指定する必要があります。これは時々痛みを伴うことがあります。あなたが気づいたように、それは情報全体を読み込みます。これは必ずしも必要なものではありません。ほとんどの場合linqクエリを実行し、更新が必要な場合はloadoptionsのみを実行します。 – eglasius