Lambda加入分组(按where子句)

时间:2018-10-09 21:37:15

标签: c# entity-framework

即使在“数据”中有3个条目,为什么我在DownTimeDetails列表中仅得到1个条目。

VehicleEventDetails Res = dbEntity.DownTimeHeaders
              .Join(dbEntity.DownTimeDetails, dth => dth.DownTimeHeaderID, dtd => dtd.DownTimeHeaderID, (dth, dtd) => new { dth, dtd })
              .Where(x => x.dth.DownTimeHeaderID == 42)
              .GroupBy(gx => gx.dtd.DownTimeDetailID)
              .Select(t => new VehicleEventDetails()
              {
                  BookingId = t.Select(a => a.dth.BookingId).FirstOrDefault(),
                  DownTimeDetails = t.Select(ab => new DownTimeDetails
                  {
                      LocalDTStartTime = (DateTime)ab.dtd.LocalDTStartTime,
                      LocalDTEndTime = (DateTime)ab.dtd.LocalDTEndTime,
                      CalculatedEventDTReason = ab.dtd.CalculatedEventDTReason,
                      CalculatedEventDTInMinutes = (int)ab.dtd.CalculatedEventDT,
                  }).ToList()
              }).FirstOrDefault();

1 个答案:

答案 0 :(得分:1)

您正在寻找这样的东西:

VehicleEventDetails Res = dbEntity.DownTimeHeaders
    .Where(x => x.DownTimeHeaderID == 42)
    .Select(x => new VehicleEventDetails
    {
        BookingId = x.BookingId,
        DownTimeDetails = x.DownTimeDetails
            .Select(dtd=> new DownTimeDetails
            {
                LocalDTStartTime = (DateTime)dtd.LocalDTStartTime,
                LocalDTEndTime = (DateTime)dtd.LocalDTEndTime,
                CalculatedEventDTReason = dtd.CalculatedEventDTReason,
                CalculatedEventDTInMinutes = (int)dtd.CalculatedEventDT,
            })
            .ToList()
    })
    .FirstOrDefault();

注意:

  • 使用.Join是一种反实体框架模式。始终尝试使用导航属性,它们存在是有原因的。
  • 除非您确实需要一个小组,否则不要使用.GroupBy。您不希望在此查询中进行任何分组。
  • 作为一般说明,请尽量不要使表达式变量名称如此混乱。