Nitin Jain
Nitin Jain

Reputation: 188

Lambda Join Group by where clause issue

Why am I getting only one entry in DownTimeDetails list even though in Data we have 3 entries.

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();

Upvotes: 0

Views: 50

Answers (1)

Camilo Terevinto
Camilo Terevinto

Reputation: 32068

You are looking for something like this:

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();

Notes:

  • Using .Join is an anti-Entity Framework pattern. Always try to use navigation properties, they exist for a reason.
  • Don't use .GroupBy unless you actually need a group. You don't want any grouping in this query.
  • As a general note, try not to make the expression variable names so confusing.

Upvotes: 1

Related Questions