Как получить определенные столбцы из thenInclude, используя .net-core и Entity Framework Core и Identity? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытался заставить этот запрос работать некоторое время, но я просто не могу этого добиться, проблема в том, что я не могу вернуть только те столбцы, которые мне нужны

var thread = context.threads.Include(t => t.posts).ThenInclude(p => p.ApplicationUser).Include(t => t.ApplicationUser).Include(t => t.movie).Where(t => t.Id == id)

Запрос возвращает всю информацию ApplicationUser, включая электронную почту и хешированный пароль, и, конечно, я не хочу, чтобы я пытался сделать это

var thread = context.threads.Include(t => t.posts).ThenInclude(p => p.ApplicationUser).Include(t => t.ApplicationUser).Include(t => t.movie).Where(t => t.Id == id).Select(t => new
            {
                title = t.title,
                body = t.body,
                threadUserName = t.ApplicationUser.UserName,
                postsThread = t.posts
            });

Но я наткнулся на контрольно-пропускной пункт, когда мне нужно запросить имя пользователя сообщений, чтобы данные из ThenInclude, попытался сделать что-то вроде t.posts.ApplicationUser.UserName и тому подобное, но это не сработало, как я могу запросить имя пользователя сообщений? ApplicationUser - это класс, производный от класса IdentityUser в пакете Identity net-core.

1 Ответ

0 голосов
/ 01 мая 2019

Для запроса postsThread вы можете добавить новый Select, что-то вроде:

var thread = _appDbContext.Threads
                          .Include(t => t.Posts)
                          .ThenInclude(p => p.ApplicationUser)
                          .Include(t => t.ApplicationUser)
                          .Where(t => t.Id == id)
                          .Select(t => new
                                       {
                                            title = t.Title,
                                            body = t.Body,
                                            threadUserName = t.ApplicationUser.UserName,
                                            postsThread = t.Posts.Select(p => new {
                                                                                      p.Content,
                                                                                      p.ApplicationUser.UserName
                                                                                  })
                                       })
                          .ToList();
...