Как отобразить две таблицы отдельно в одном представлении с запросом на объединение в одной таблице? - PullRequest
1 голос
/ 20 апреля 2019

Я создаю панель мониторинга в ASP.NET MVC с использованием C # и Entity Framework.

У меня есть две таблицы

  1. Tbl_Channel (Id, Channel_Name)
  2. Tbl_News (Id, Channel_Id, News_Title, News_Description)

Когда я попробовал этот запрос:

 public ActionResult Dashboard()
    {
       ShowData model = new ShowData();
       var rs1 = (from c in db.Tbl_Channel select c).ToList();

       var rs2 = (from c in db.Tbl_News
                  join d in db.Tbl_Channel on c.Channel_Id equals d.Id
                  select new
                         {
                              c.Id,
                              c.News_Title,
                              c.News_Description,
                              d.Channel_Name
                         })
                 .OrderByDescending(x => x.Id)
                 .ToList();

       model.tbl_ChannelData = rs1;
       model.tbl_NewsData = rs2;

       return View(model);
}

Я получаю следующую ошибку в строке model.tbl_NewsData = rs2:

Класс модели:

public class ShowData
{
    public List<Tbl_Channel> tbl_ChannelData { get; set; }
    public List<Tbl_News> tbl_NewsData { get; set; }
}

Ошибка:

Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'System.Collections.Generic.List

Вывод, который я хочу отобразить, будет следующим:

(Id, Channel_Name, News_Title, News_Description)

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Основная причина проблемы заключается в следующем: вы определили свои свойства в классе модели следующим образом:

public class ShowData
{
    public List<Tbl_Channel> tbl_ChannelData { get; set; }
    public List<Tbl_News> tbl_NewsData { get; set; }
}

Тем не менее, ваш запрос выбирает анонимный тип:

  select new
         {
             c.Id,
             c.News_Title,
             c.News_Description,
             d.Channel_Name
         }

Это вызывает ошибку. Что вам нужно сделать, это создать объекты типа, определенного в вашем классе модели, например,

  select new Tbl_News
         {
             c.Id,
             c.News_Title,
             c.News_Description,
             d.Channel_Name
         }

или если этот анонимный тип еще не соответствует ни одному из существующих типов, вам необходимо определить подходящий тип

public class ChannelAndNews
{
     public int ChannelId { get; set; }
     public string NewsTitle { get; set; }
     public string NewsDescription { get; set; }
     public string ChannelName { get; set; }
}

и создайте экземпляры этого типа, которые затем можно назначить свойствам класса модели:

select new ChannelAndNews
         {
             ChannelId = c.Id,
             NewsTitle = c.News_Title,
             NewsDescription = c.News_Description,
             ChannelName = d.Channel_Name
         }
0 голосов
/ 20 апреля 2019

Изменение запроса на этот, возможно, работает:

  var query = (from c in db.tblnews 
                 join d in db.tblchannel on c.Channel_Id equals d.Id 
                 Select new Data()
                        {
                            Id = c.Id,
                            News_Title= c.News_Title,
                            News_Description= c.News_Description,
                            Channel_Name= d.Channel_Name
                         })
                .OrderByDescending(x => x.Id)
                .ToList();


return View(query)

создать этот класс:

public class Data
{
        public int Id{ get; set; }
        public string News_Title{ get; set; }
        public string News_Description{ get; set; }
        public string Channel_Name{ get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...