Nested Query Entity Framework - PullRequest
       2

Nested Query Entity Framework

0 голосов
/ 08 сентября 2018

Нужна помощь в преобразовании вложенного запроса ниже SQL в запрос LINQ?

select P.ProductId, P.Name, C.Name, I.Image
from Product P 
join ProductImage I on P.ProductId = I.ProductId
join ProductCategory C on P.Category = C.CategoryId
where P.ProductId in (select distinct ProductId
                      from ProductVariantMapping M
                      where M.GUID in (select top 3 V.Guid
                                       from [Order] O 
                                       join Inventory V on V.InventoryId = O.InventoryId
                                       group by O.InventoryId, V.Guid
                                       order by Sum(O.Quantity) desc))

Ниже приведена моя попытка преобразования в запрос LINQ:

var a = (from product in ekartEntities.Products
         join productImage in ekartEntities.ProductImages
                        on product.ProductId equals productImage.ProductId
         join category in ekartEntities.ProductCategories
                        on product.Category equals category.CategoryId
         where product.ProductId
         select new ProductDTO()
                    {
                            ProductId = product.ProductId,
                            Name = product.Name,
                            Category = category.Name,
                            Image = productImage.Image
                    }).ToList();

что эквивалентно «IN» при преобразовании в LINQ.

Я получил решение для предложения «IN». Но как мне использовать сумму (количество) в порядке после группировки?

Я новичок в Entity Framework. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 08 сентября 2018

В LINQ вам нужно будет использовать метод "contains()" для генерации 'IN'. Вам нужно поместить список в метод Contains. Если отправляет запрос, этот запрос будет повторен для завершения, и это приведет к снижению производительности.

Пример:

var sampleList = (from order ekartEntities.Order
                  join inventory in ekartEntities.Inventory on order.InventoryId equals inventory.InventoryId
                  select order).toList();

var query = (from product in ekartEntities.Products
                        join productImage in ekartEntities.ProductImages
                        on product.ProductId equals productImage.ProductId
                        join category in ekartEntities.ProductCategories
                        on product.Category equals category.CategoryId
                     where sampleList.Contains(product.ProductId)
                        select new ProductDTO()
                        {
                            ProductId = product.ProductId,
                            Name = product.Name,
                            Category = category.Name,
                            Image = productImage.Image
                        }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...