LINQ Select from 3 Dish / Images / ImageDish tables

I have a problem with selecting from 3 tables. I am using 3 tables because one product can have more than one image.

DB print

Then I have LINQ.

  public List<DishModel> GetDish(int dish)
    {
        var query = (from m in db.Dish
            join i in db.ImageDish on m.idDish equals i.idDish
            join t in db.TypeDish on m.idTypeDish equals t.idTypeDish
            where m.idTypeDish == dish
            select new DishModel()
            {          
                Name = m.name,
                CalorificValue = m.calorificValue,
                Price = m.price,
                ShortName = m.shortName,
                Time = m.manufactureTime,
                Description = m.description,
                UrlImageList = new List<string>()
                {
                    i.Image.urlImage
                }

            }).ToList();
        return query;
    }

      

With this LINQ, I get

[{"Time":"asdasd","CalorificValue":"123","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["sugestao.jpeg"],"Name":"asdasd","ShortName":"asdasd","Description":"asdas","Price":"12"},{"Time":"123","CalorificValue":"12","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["sugestao.jpeg"],"Name":"asdasdasd","ShortName":"asdasd","Description":"sdasd","Price":"12"},{"Time":"123","CalorificValue":"12","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["bebida.jpeg"],"Name":"asdasdasd","ShortName":"asdasd","Description":"sdasd","Price":"12"},{"Time":"123","CalorificValue":"123","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["sugestao.jpeg"],"Name":"asdasd","ShortName":"qweqw","Description":"asdasd","Price":"12"},{"Time":"12","CalorificValue":"12","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["pexels-photo-59016.jpeg"],"Name":"azores","ShortName":"asdasd","Description":"A região do Douro localiza-se no Nordeste de Portugal, rodeada pelas serras do Marão e Montemuro. A área vitícola ocupa cerca de 40000 hectares, apesar da região se prolongar por cerca de 250000 hectares. O rio Douro e os seus afluentes, como por exemplo o Tua e o Corgo, correm em vales profundos e a maior parte das plantações são encaixadas nas bacias hidrográficas dos rios.","Price":"12"},{"Time":"12","CalorificValue":"2312","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["sugestao.jpeg"],"Name":"asdasd","ShortName":"asdas","Description":"asdasda","Price":"12"},{"Time":"12","CalorificValue":"2312","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["bebida.jpeg"],"Name":"asdasd","ShortName":"asdas","Description":"asdasda","Price":"12"},{"Time":"12","CalorificValue":"2312","BeveragesList":null,"DishEnum":0,"Id":null,"UrlImageList":["Atum-Peixe-Desenho.jpg"],"Name":"asdasd","ShortName":"asdas","Description":"asdasda","Price":"12"}]

      

It selects the same product more than once due to the list of images, I don't know what to do. What's the best way to process images?

+3


source to share


1 answer


You can use a group join to combine dishes with all of their images:



 var query = from m in db.Dish
             join t in db.TypeDish on m.idTypeDish equals t.idTypeDish
             join i in db.ImageDish on m.idDish equals i.idDish into g           
             where m.idTypeDish == dish
             select new DishModel()
             {          
                 Name = m.name,
                 CalorificValue = m.calorificValue,
                 Price = m.price,
                 ShortName = m.shortName,
                 Time = m.manufactureTime,
                 Description = m.description,
                 UrlImageList = g.Select(i => i.Image.urlImage).ToList()
             };

      

+2


source







All Articles