2011-12-05 2 views
0

Product и ProductCategory таблицы «подключены» через таблицу «многие ко многим» ProductToCategory.Как написать минимальный запрос linq со многими таблицами?

Для некоторых продуктов с некоторым идентификатором (давайте пометить его как product_1) Мне нужно, чтобы получить следующий продукт той же категории как product_1.

Я хотел сделать это с один запрос, поэтому следующий запрос выполняет работу, но sql-профайлер показывает очень ОГРОМНЫЙ запрос. Есть ли предложения, как переписать запрос?

(from p in cxt.Products 
join c in cxt.ProductToCategories on p.Id equals c.ProductId 
where p.Id > id && c.CategoryId == (from p2 in cxt.Products 
            join c2 in cxt.ProductToCategories on p.Id equals c.ProductId 
            where p2.Id == id 
            select c2.CategoryId).FirstOrDefault() 
orderby p.Id 
select p).FirstOrDefault(); 
+0

Пожалуйста, отправьте образец данных, потому что это кажется немного неопределенным: они являются: отношения между товаром и категорией, и вы говорите о «следующем продукте той же категории» (та же категория означает 1 категорию, но это am: n то они более чем одной категории) – danihp

ответ

0

Примечание: Я полагаю, что, когда сказал

Мне нужно, чтобы получить следующий продукт той же категории, что и product_1.

что на самом деле означает

Мне нужно, чтобы получить следующий продукт одной из категорий product_1.

(from p in ctx.Products 
join c in cts.ProductsToCategories on c.ProductId 
join c2 in cts.ProductsToCategories on c.CategoryId = c2.CategoryId 
join p2 in ctx.Products on c2.ProductId = p2.id 
where 
    p2.Id == id && 
    p2 != p 
orderby p).FirstOrDefault(); 
+0

@aF. Спасибо за улучшение грамматики. – danihp

0

Я предлагаю вам создать представление в базе данных под названием NextProductInCategory, а затем имеют простой Linq запрос для получения чего вы хотите.

Смежные вопросы