Saya punya dua meja. Sebuah tabel bernama Order dan sebuah tabel bernama OrderRows.

Order dapat memiliki nol atau lebih OrderRows.

Saya ingin menanyakan semua Pesanan dan melakukan Sum untuk semua Baris Pesanan yang termasuk dalam Order itu.

Saya melakukannya seperti ini:

var model = await _dbContext.Orders
    .Join(_dbContext.OrderRows, o => o.Id, or => or.OrderId, (o, or) => new {o, or})
    .GroupBy(x => new
    {
        x.o.Id,
        x.o.Name
    })
    .Select(g => new CustomDto
    {
        Id = g.Key.Id,
        Name = g.Key.Name,
        TotalPrice = g.Sum(x => x.wkr.Price)
    }).ToListAsync();

Ini berfungsi dengan baik untuk semua Pesanan yang memiliki OrderRows. Namun, beberapa Pesanan tidak memiliki Baris Pesanan (belum).

Saat ini Pesanan yang tidak memiliki Baris Pesanan, tidak disertakan dalam hasil.

Dalam kasus tersebut saya masih ingin memilikinya dalam hasil saya, tetapi dengan TotalPrice dari 0.

Apa yang harus saya ubah dalam kueri Lambda saya?

1
Vivendi 8 Agustus 2019, 15:47

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan Select sederhana tanpa pengelompokan. Hitung saja TotalPrice sebagai sub-kueri:

var model = await _dbContext.Orders.Select(o => new CustomDto
    {
      Id = o.Id,
      Name = o.Name,
      TotalPrice = _dbContext.OrderRows.Where(or => or.OrderId == o.Id).Sum(or => or.wkr.Price)
    }).ToListAsync();

Saya belum mengujinya, tetapi semoga idenya jelas

1
Aleks Andreev 8 Agustus 2019, 13:00