2010-01-22 6 views
3

Моего приложения имеет модель Entity Framework, содержащую много-ко-многим вроде следующего:Многие ко многим сортировка в Entity Framework

ProductGroup: 
    Scalar: Id, Name 
    Navigation: ProductGroupProduct 
Product: 
    Scalar: Id, Sku, Description, etc. 
    Navigation: ProductGroupProduct 
ProductGroupProduct: 
    Scalar: ProductGroupId, ProductId, Position 
    Navigation: Product, ProductGroup 

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

Как вы напишете запрос LINQ, который возвращает список продуктов в данной группе товаров, отсортированный по свойству Position? Если бы я писал хороший SQL-код, я бы написал что-то вроде этого:

SELECT p.Id, p.Sku, p.Description 
FROM Product p 
INNER JOIN ProductGroupProduct pgp ON p.Id = pgp.ProductId 
WHERE pgp.ProductGroupId = @MyProductGroupId 
ORDER BY pgp.Position 

Но я не могу вычислить LINQ.

ответ

3

Um, ваш SQL не будет работать, потому что нет ProductGroup.Position

Но я думаю, что вы хотите:

var q = from pgp in Context.ProductGroupProducts 
     where pgp.ProductGroup.Id == id 
     orderby pgp.Position 
     select pgp.Product; 
+0

Сладкое, это то, что мне было нужно. Я продолжал пытаться прийти к нему со стороны Продукта. Мне не пришло в голову, что я могу начать посередине. Благодарю. О, и я исправлю SQL. Это то, что я получаю для ввода его в редактор здесь, не проверяя его в первую очередь. –

+1

Вы можете сделать это и из продукта, но это намного сложнее: из p в Context.Products пусть pgp = (из pgp в p.ProductGroups, где pgp.ProductGroup.Id == id) .FirstOrDefault(), где pgp ! = null orderby pgp.Position select p; ' –

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