C# 在单个LINQ上使用外键分组

C# 在单个LINQ上使用外键分组,c#,sql,entity-framework,linq,C#,Sql,Entity Framework,Linq,我有两个相关的表,它们是 时间表 SlotId Description Amount 和插槽 Id Name 示例数据: 时间表 slotid description amount -------------------------------- 1 Morning charge 300 1 Late fee 300 1 Earlier bonus 200 1 Half day

我有两个相关的表,它们是

时间表

SlotId
Description 
Amount
插槽

Id
Name
示例数据:

时间表

slotid    description    amount
--------------------------------
    1     Morning charge   300
    1     Late fee         300
    1     Earlier bonus    200
    1     Half day         150
    2     Morning charge   300
    2     Late fee         300
    2     Earlier bonus    200
    2     Half day         150
    3     Morning charge   300
    3     Late fee         300
    3     Earlier bonus    200
    3     Half day         150
最终结果需要作为
SlotSchedules
列表,如下所示:

    SlotId
    SlotName
    List<Schedules>
SlotId
SlotName
列表
我需要:

  • 获取的时间表列表
  • 然后在其中找到不同的插槽
  • 然后遍历每个插槽,构建我需要的模型,如下所示
这就是我对LINQ的尝试:

    List<Schedules>  schedulesAll = (from n in dbContext.Schedules                                
                                    select n).ToList();

    var slotsdistinct = schedulesAll.Select(x => x.SlotId).Distinct().ToList();

    foreach (var slot in slotsdistinct)
    {
        var scheduledforslot = schedulesAll.Where(x => x.SlotId == slot).Select(x => x).ToList();  

        foreach (Schedules _schedule in scheduledforslot)
        {
            //ListModel.Add(new DetailsModel { Name = _schedule.Description, Amount = (_schedule.Amount });
        }
    }
List schedulesAll=(从dbContext.Schedules中的n开始)
选择n.ToList();
var slotsdinct=schedulesAll.Select(x=>x.SlotId.Distinct().ToList();
foreach(插槽中的var插槽)
{
var scheduledforslot=schedulesAll.Where(x=>x.SlotId==slot);
foreach(进度表(scheduledforslot中的进度表)
{
//Add(新的DetailsModel{Name=_schedule.Description,Amount=(_schedule.Amount});
}
}
有没有办法在单个LINQ查询中实现它?

试试以下方法:

  var slotsSchedules = dbContext.Slots.ToList().Select(slot => new { 
                       SlotID = slot.Id, 
                       Name = slot.Name,
                       SlotSchedules = dbContext.Schedules.ToList()
                                      .Where(schedule = > schedule.SlotId == slot.Id).ToList()});

告诉我们您在C中尝试了什么,然后我们将与您一起修复:)@CodeNotFound请查看编辑您在代码中仅使用
计划表
表,是否足够?您不想加入表吗?它们通过外键slotid关联