У меня есть следующий запрос сущностей 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 возможных решения
Я предполагаю, что это просто вопрос удобочитаемости, но оба они будут работать и семантически идентичны.
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);
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);
Спасибо Хумешу и Правину за помощь в этом. Спасибо остальным за участие.