сложный порядок, который ссылается на другую таблицу - PullRequest
2 голосов
/ 14 декабря 2010

У меня следующий запрос для начала:

var query = from p in db.Products
                        from pc in p.NpProductCategories
                        where pc.CategoryId == categoryId 
                        select p;

Я применяю еще несколько фильтров, и в конце хочу отсортировать результаты:

if (orderBy == ProductSortingEnum.Name)
                    query = query.OrderBy(x => x.Name);
                else
                    query = query.OrderBy(............);

Моя большая проблема (из-за незнания linq слишком хорошо) - это ДРУГОЕ здесь. Как отсортировать результаты по столбцу, которого нет в текущем наборе результатов? Я хотел бы как-то ссылаться на другой запрос linq в порядке. Сортировка, которую я пытаюсь добиться, состоит в том, чтобы связать запрос NpProductVariants, используя ProductId для соответствия NpProductVariant и Products и сортировать по цене варианта NpProduct

Ответы [ 2 ]

8 голосов
/ 14 декабря 2010

Предположим, у вас установлены отношения в базе данных ...

От одного к одному (и от многих к одному):

query = query.OrderBy(p => p.NpProductVariant.Price);

Для одного ко многим:

query = query.OrderBy(p => p.NpProductVariants.Select(v => v.Price).Max());

Также:

var query =
  from p in db.Products 
  where p.NpProductCategories.Any(pc => pc.CategoryId == categoryId)
  select p;
1 голос
/ 14 декабря 2010

Я думаю, что вы можете подключить ваш Join к вашему запросу, если он возвращает то же самое.Так что, может быть, что-то вроде (я не уверен на 100%, так как я не пробовал это сделать):

            query = from i1 in query
                 join i2 in query2 on i1.PropertyToJoin equals i2.PropertyToJoin
                 orderby i1.OrderProp1, i2.OrderProp2
                 select i1;

Но я думаю, что было бы неплохо проверить сгенерированный sql, чтобы он все еще был эффективным.

...