实体框架 4 - 连接 2 个表然后对它们进行分页的语法是什么?

2024-01-27

我有以下 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() 的语法感到困惑,并且似乎无法查找任何示例(在线或书籍中)。

NOTE:我加入表格的原因是为了进行排序。如果有比连接更好的基于相关表中的值进行排序的方法,请将其包含在您的答案中。

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 对此提供的帮助。感谢其他人的贡献。


在映射中定义联接,然后使用它。你真的不会通过使用得到任何东西Join方法 - 相反,使用Include方法。好多了。

var data = objContext.ProductInventory.Include("Variant")
               .Where(i => i.ProductId == productId && i.StoreId == storeId)
               .OrderBy(j => j.Variant.SortOrder)
               .Skip(x)
               .Take(y);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架 4 - 连接 2 个表然后对它们进行分页的语法是什么? 的相关文章

随机推荐