Saya sedang mengerjakan RestAPI dan saya mencoba menggunakan metode Sertakan (sertakan tabel bersama) di Dapatkan permintaan oleh HobbyId untuk menampilkan file tertentu dari tabel ini bukan semuanya.

Tabel: Pengguna, Hobi. Tabel Gabungan adalah : Pengguna Hobi yang ingin saya tampilkan hanya bidang HobbyId dan SkillsLevel dari tabel ini.

public async Task<User[]> GetUsersByHobby(int hobbyID)
{
    _logger.LogInformation($"Getting Users for hobby with ID:{hobbyID}");
    IQueryable<User> query =
                  _context.Users
                  .Include(a => a.HobbyUsers.Select(a => new
                      {
                          Id = a.HobbyId,
                          SkillLevel = a.SkillLevel
                      }))
                  .Where(h => h.HobbyUsers.Any(u => u.Hobby.HobbyId == hobbyID))
                  .OrderBy(u => u.HobbyUsers.First().SkillLevel);

    return await query.ToArrayAsync();
}
0
A.Yassin 28 Mei 2020, 16:38

1 menjawab

Jawaban Terbaik

Anda tidak dapat menambahkan ketentuan dalam metode Sertakan di ef core, jadi untuk memfilter bidang yang ditampilkan dalam hasil, Anda perlu select the whole after the where condition.

Tetapi karena Anda ingin menghapus beberapa bidang dalam hasil, maka konten yang dikembalikan oleh kueri tidak akan diterima sebagai jenis User (telah diubah menjadi a custom type), Anda perlu menggunakan var untuk menerima.

Berikut demonya:

var query = _context.Users
              .Include(a => a.HobbyUsers)
              .Where(h => h.HobbyUsers.Any(u => u.Hobby.HobbyId == hobbyID))
              .Select(x => new 
              {
                  //here are Users class fields, you can change to what your class has.
                  Id = x.Id,
                  Name = x.Name,
                  HobbyUsers = x.HobbyUsers.Select(a => new 
                  {
                      Id = a.HobbyId,
                      SkillLevel = a.SkillLevel
                  })
              }).OrderBy(u => u.HobbyUsers.First().SkillLevel).ToList();
0
LouraQ 29 Mei 2020, 07:02