Как выбрать записи из нескольких таблиц с максимальным количеством значений из одной таблицы, используя Linq в Asp.net MVC C # - PullRequest
0 голосов
/ 27 марта 2019

У меня есть 3 таблицы: 1. Tbl_Model, 2. Tbl_ModelImg, 3. Tbl_Category

Я хочу знать, как извлечь записи из этих 3 таблиц, используя categoryId.

Одна модельможет иметь несколько изображений, но я хочу показать все продукты этой категории с их изображениями.Проблема в том, что я хочу только одно изображение в этом представлении.Поэтому, когда пользователь нажимает на эту конкретную модель, сведения об этой модели и всех ее изображениях отображаются в следующем представлении.

Следующий запрос работает нормально, но отображает все изображения с названием их модели.Означает Если модель имеет 4 изображения, чем на странице сведений о категории, она отображает 4 элемента с одинаковым именем и разными изображениями.

Вот класс модели:

     public class showdata
       {
        public Tbl_ModelImg tmi { get; set; }
        public Tbl_Model tm { get; set; }
        public Tbl_SubCategory tblsubcategory { get; set; }
        }
       public ActionResult Categorydetails(string sid)
            {
            var sId = Int64.Parse(new 
         StandardModule().Decrypt(HttpUtility.UrlDecode(sid.ToString())));


            try
            {
                var query = (from c in db.Tbl_Model

                             join o in db.Tbl_ModelImg
                              on c.Model_Id equals o.Model_Id 
                             join d in db.Tbl_SubCategory on c.SubCategory_Id 
                             equals d.Id
                             where c.SubCategory_Id == sId
                             select new showdata()
                             {
                                 tm = c,
                                 tmi = o,
                                 tblsubcategory = d                  


                             }).OrderByDescending(d => d.tm.Id).ToList();


                    return View(query);
                }

Ответы [ 2 ]

0 голосов
/ 28 марта 2019
                var query = (from c in db.Tbl_Model

                         join o in db.Tbl_ModelImg.GroupBy(m => m.Model_Id).Select(m 
                          => m.FirstOrDefault())
                          on c.Model_Id equals o.Model_Id 
                         join d in db.Tbl_SubCategory on c.SubCategory_Id equals d.Id
                         where c.SubCategory_Id == sId
                         select new showdata()
                         {
                             tm = c,
                             tmi = o,
                             tblsubcategory = d


                         }).OrderByDescending(d => d.tm.Id).ToList();
0 голосов
/ 28 марта 2019

Замените вторую строку запроса LINQ на

join o in db.Tbl_ModelImg.GroupBy(m => m.Model_Id).Select(m => m.First())

. GroupBy() сгруппирует элементы в Tbl_ModelImg по Model_Id, а затем Select() обрежет содержимое полученного результата.набор данных до первого элемента в каждой группе.

Как только предложение where ограничивает ваши результаты только теми элементами, которые соединяются с правильным SubCategory_Id, тогда у вас есть то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...