Entity Framework Code First を使い始めています。
そのようなPOCOがあるとします(最終的に単純化されています):
public class BortStructure
{
public Guid Id { get; set; }
public String Name { get; set; }
}
public class Slot
{
public Guid Id { get; set; }
public String Name { get; set; }
public BortStructure { get; set; }
}
public class SystemType
{
public Guid Id { get; set; }
public String Name {get; set; }
}
public class SlotSystemType
{
public Guid Id { get; set; }
public Slot Slot { get; set; }
public SystemType SystemType {get; set; }
}
とコンテキスト
public MyContext : DbContext
{
public DbSet<BortStructure> BortStructures { get; set; }
public DbSet<Slot> Slots{ get; set; }
public DbSet<SystemType> SystemTypes { get; set; }
public DbSet<SlotSystemType> SlotSystemTypes { get; set; }
}
接続されたスロットのリストを使用して Id で BortStructure を取得するタスクがあり、それぞれに systemTypes のリストが接続されています。
SQL を使用すると、いくつかの JOIN でそれを行うことができました。
SELECT BortStructures.Id, BortStructures.Name, Slots.Id,
Slots.Name, SystemType.Id, SystemType.Name FROM
((BortStructures LEFT JOIN Slots ON BortStructures.Id = Slots.BortStructureId)
LEFT JOIN SlotSystemTypes ON SlotSystemTypes.SlotId = Slots.Id)
LEFT JOIN SystemTypes ON SystemTypes.Id = SlotSystemTypes.SystemTypeId
WHERE BortStructures.Id='XXXXXX' ORDER BY Slots.Id, SystemType.Id
しかし、Entity Framework Code First では、それを行う方法がわかりません。
私が使用する場合
var slotSystemTypes = from sl in MyContext.SlotSystemTypes
where sl.Slot.BortStructure.Id = XXXXXX
orderby sl.Slot.Id, sl.SystemType.Id
select sl;
もちろん、BortStructure が SystemTypes が添付されていないスロット/スロットで構成されていない場合、何も受け取りません。
スロットの空のリスト/スロット付きの BortStructure を取得する代わりに、それぞれに SystemTypes の空のリストが添付されています。
データベース構成の単一のLINQ クエリでそれをアーカイブする方法はありますか?