Willie254 Ответов: 1

Нужна помощь по преобразованию кода SQL с LINQ


Может ли кто-нибудь помочь мне преобразовать следующий SQL в LINQ, я тщетно пытался получить код LINQ, который бы работал.

SELECT TOP 5 ProductName, COUNT(ProductName) AS CountOfProducts FROM OrderDetails 
INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID
WHERE OrderID IN (
    SELECT OrderID FROM OrderDetails WHERE ProductID = 1
) 
AND OrderDetails.ProductID <> 1 
GROUP BY ProductName ORDER BY CountOfProducts DESC


Что я уже пробовал:

Я пробовал установить LINQER, но он не устанавливается. Поиск в гугле не даст мне другого инструмента.... пожалуйста помочь

Wendelius

Какой тип запроса LINQ вам нужен? Вы используете рамки сущности и как? Пожалуйста, опубликуйте пример того, что вы пробовали.

Andy Lanng

а вы пробовали linqpad? Я слышу хорошие вещи,но сам не пробовал. По крайней мере, это не текущая итерация.

Jon McKee

Не могли бы вы объяснить, что пытается сделать команда SQL? Меня интересует "где" Кодзаказа "в (выберите код заказа из "заказано", где Кодтовара = 1) и "заказано".ProductID < & gt; 1." пытается ли этот SQL найти комбинации ProductName/OrderDetails, которые не имеют правильных данных? LINQ не слишком сложен, но все макеты, которые я пытаюсь сделать, ничего не возвращают из-за этого утверждения. Вы фильтр по Кодзаказа, которые Кодтовара = 1, а затем фильтр по столбцу productid != 1. Это кажется нелогичным, если ожидаемые ошибки.

Willie254

Я создаю сайт электронной коммерции,и SQL (или,скорее,LINQ, который мне нужен) должен реализовать "те, кто купил продукт A, также купили продукты B, C, D, E". Надеюсь, это поможет вам получить представление. Я знаю, что это может быть просто, но я новичок в LINQ, пожалуйста, помогите.

1 Ответов

Рейтинг:
4

Jon McKee

var query = (from order in db.OrderDetails
             where order.ProductID != 1
             join product in db.Products on order.ProductID equals product.ProductID
             group product by product.ProductName into result
             let count = result.Count()
             orderby count descending
             select new { ProductName = result.Key, CountOfProducts = count }
            ).Take(5);


Все еще не совсем уверен, что это такое. OrderID IN (SELECT ....) раздел завершается, но вы можете сделать это с чем-то вроде этого:
db.OrderDetails.Any(o => o.ProductID == 1 && o.OrderID == external.OrderID)

Я оставлю это на ваше усмотрение, так как, честно говоря, не могу заставить запрос сделать что-либо полезное при включении этой проверки. Очевидно, я упускаю здесь какие-то отношения.


Maciej Los

Молодец!
5ед!