gpt4 book ai didi

linq - Entity Framework 4 - 加入 2 个表然后对它们进行分页的语法是什么?

转载 作者:行者123 更新时间:2023-12-03 10:29:38 25 4
gpt4 key购买 nike

我有以下 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 在这方面的帮助。感谢其他人的贡献。

最佳答案

将以下行添加到您的查询中

var pagedQuery = data.Skip(PageIndex * PageSize).Take(PageSize); 

数据变量是 IQueryable,所以你可以在它上面加上 add skip & take 方法。如果你在 Product & Variant 之间有关系,你真的不需要明确加入,你可以像这样引用变体
IQueryable<ProductInventory> data = 
from inventory in objContext.ProductInventory
where inventory.ProductId == productId && inventory.StoreId == storeId
orderby inventory.variant.SortOrder
select new()
{
property1 = inventory.Variant.VariantId,
//rest of the properties go here
}
pagedQuery = data.Skip(PageIndex * PageSize).Take(PageSize);

关于linq - Entity Framework 4 - 加入 2 个表然后对它们进行分页的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com