ページネーションを追加したい2つの結合テーブルを含む次のlinq-to-entitiesクエリがあります。
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() を呼び出す必要があることに気付きました。例を見つけるには(オンラインまたは書籍で)。
注:テーブルを結合する理由は、並べ替えを行うためです。関連するテーブルの値に基づいて並べ替えるには、結合するよりも良い方法がある場合は、それを回答に含めてください。
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);
これを手伝ってくれた Khumesh と Pravin に感謝します。貢献してくれてありがとう。