我有以下 linq-to-entities 查询,其中包含 2 个要添加分页的连接表:
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);
感谢 Khumesh 和 Pravin 在这方面提供的帮助。感谢其他人的贡献。