我开始首先使用实体框架代码。
假设有这样的 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 查询对我的数据库配置进行存档?