Отображение на модель - PullRequest
0 голосов
/ 09 марта 2019

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

не может набрать linq.iqueryable для collection.generic.list

но я не могу ToList () мой запрос.

   List<Models.ChatMessageModel> list = from dbModel in db.ChatMessages
                                              join a in db.Users on dbModel.UserId equals a.UserId
                                              select new Models.ChatMessageModel
                                              {
                                                  User = new Models.UserModel
                                                  {
                                                      UserId = dbModel.UserId,
                                                      UserName = a.UserName
                                                  },
                                                  UserId = a.UserId,
                                                  DateSent = dbModel.DateSent,
                                                  ChatMessage = dbModel.ChatMessage,
                                                  ChatMessageId = dbModel.ChatMessageId
                                              };

ChatMessageModel

 public class ChatMessageModel
    {
        [Key]
        public Guid ChatMessageId { get; set; }

        public virtual Guid UserId { get; set; }

        [ForeignKey("UserId")]
        public virtual UserModel User { get; set; }
        public string ChatMessage { get; set; }

        public DateTime DateSent { get; set; }
    }

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Если вы пытаетесь получить информацию о пользователе из сообщений чата, вы можете попробовать:

db.ChatMessages.Include(chatMessage => chatMessage.User).ToList();

Вышеприведенное возвращает всех пользователей, используемых всеми сообщениями чата.

Прикол здесь EFиспользуя Lazy Loading.Поскольку ваш внешний ключ в ChatMessages указывает на пользователей, EF достаточно умен, чтобы вернуть его в виртуальное поле пользователя.

Пока ваш контекст (в вашем случае, переменная db) не располагается ленивымloading загрузит вашего пользователя, но если вы хотите, чтобы он был загружен немедленно, вы можете использовать метод Include(chatMessage => chatMessage.User).

0 голосов
/ 09 марта 2019

Просто преобразовать в список, используя метод ToList

List<Models.ChatMessageModel> list = (from dbModel in db.ChatMessages
        join a in db.Users on dbModel.UserId equals a.UserId
        select new Models.ChatMessageModel
        {
           User = new Models.UserModel
           {
               UserId = dbModel.UserId,
               UserName = a.UserName
           },
           UserId = a.UserId,
           DateSent = dbModel.DateSent,
           ChatMessage = dbModel.ChatMessage,
           ChatMessageId = dbModel.ChatMessageId
        }).ToList();
...