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.
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 to share