Запросы в Entity Framework, выражение Select внутри include - PullRequest
1 голос
/ 01 августа 2020

Я пытаюсь сформировать HTTP-запрос GET, в котором отображается стена сущности и некоторые строки ее родительской таблицы (пользователя). Мне удалось получить всю родительскую строку, но я борюсь с оператором select, где я хочу выбрать, какие строки и значения я хочу в своем ответе.

[HttpGet]
        public async Task<ActionResult<IEnumerable<Wall>>> GetWalls()
        {

            return await _context.Walls
                .Include(p=>p.User)
                .ToListAsync();
        }

Мой ответ выглядит следующим образом:

{
        "wallID": "46d7389f-2dcd-4b52-b4c0-32e7bbf5af24",
        "wallName": "erfnoerng",
        "dateCreated": "2020-07-31T11:53:21.9217551",
        "dateUpdated": null,
        "userID": "274eed93-fedf-4825-9c11-deb1e7678b99",
        "user": {
            "fullName": "Phil Hearing",
            "wall": [],
            "id": "274eed93-fedf-4825-9c11-deb1e7678b99",
            "userName": "philcuAdmin",
            "normalizedUserName": "PHILCUADMIN",
            "email": "phil@gmail.com",
            "normalizedEmail": "PHIL@GMAIL.COM",
            "emailConfirmed": false,
            "passwordHash": "AQAAAAEAACcQAAAAECPcBzMuCBrvo5jfSvRC8htiBMcXY6uHPymLvLLpqTOQc0iiYO9mB7XS82O0f2OEkA==",
            "securityStamp": "DCYN6LTUSAP3HSAD6ZEENPJ6CPZXCDAO",
            "concurrencyStamp": "fb06525c-0bad-4f06-bbdd-8f4404097a54",
            "phoneNumber": null,
            "phoneNumberConfirmed": false,
            "twoFactorEnabled": false,
            "lockoutEnd": null,
            "lockoutEnabled": true,
            "accessFailedCount": 0
        },
        "groupATerms": null,
        "groupBTerms": null,
        "groupCTerms": null,
        "groupDTerms": null,
        "groupAConnections": null,
        "groupBConnections": null,
        "groupCConnections": null,
        "groupDConnections": null
    }

Я хотел бы получить только Username, email и fullName из родительской таблицы, но я получаю сообщение об ошибке, когда пишу оператор .Select, в котором говорится, что Select не существует в текущем контексте.

1 Ответ

0 голосов
/ 01 августа 2020

Создайте ViewModel Вот так:

public class DataViewModel
{
  public string FullName{ get; set; }
  public string Email{ get; set; }
  public string UserName{ get; set; }
}

А затем:

[HttpGet]
public async Task<ActionResult> GetWalls()
{
    var result = await _context.Walls.Include(p=>p.User).Select(usr => new DataViewModel()
    {
        UserName = usr.User.UserName,
        Email= usr.User.Email,
        FullName= usr.User.FullName
    }).ToListAsync();

   return Ok(result);
}
...