Entity Framework 4 -Каков синтаксис соединения двух таблиц с последующим разбиением на страницы?

У меня есть следующий запрос сущностей linq -to -с двумя соединенными таблицами, к которым я хотел бы добавить нумерацию страниц :

IQueryable<ProductInventory> data = from inventory in objContext.ProductInventory
    join variant in objContext.Variants
        on inventory.VariantId equals variant.id
     where inventory.ProductId == productId
     where inventory.StoreId == storeId
     orderby variant.SortOrder
     select inventory;

. Я понимаю, что мне нужно использовать метод расширения.Join (), а затем вызвать.OrderBy (). ].Skip ().Take ()для этого, я просто запутался в синтаксисе Join ()и не могу найти примеров (ни в Интернете, ни в книгах ).

ПРИМЕЧАНИЕ:Причина, по которой я присоединяюсь к таблицам, состоит в том, чтобы выполнить сортировку. Если есть лучший способ сортировки на основе значения в связанной таблице, чем объединение, включите его в свой ответ.

2 возможных решения

Я предполагаю, что это просто вопрос удобочитаемости, но оба они будут работать и семантически идентичны.

1

IQueryable<ProductInventory> data = objContext.ProductInventory
               .Where(y => y.ProductId == productId)
               .Where(y => y.StoreId == storeId)
               .Join(objContext.Variants,
                    pi => pi.VariantId,
                    v => v.id,
                    (pi, v) => new { Inventory = pi, Variant = v })
               .OrderBy(y => y.Variant.SortOrder)
               .Skip(skip)
               .Take(take)
               .Select(x => x.Inventory);

2

var query = from inventory in objContext.ProductInventory
    where inventory.ProductId == productId
    where inventory.StoreId == storeId
    join variant in objContext.Variants
        on inventory.VariantId equals variant.id
    orderby variant.SortOrder
    select inventory;

var paged = query.Skip(skip).Take(take);

Спасибо Хумешу и Правину за помощь в этом. Спасибо остальным за участие.

26
задан casperOne 27 December 2018 в 17:23
поделиться