Entity framework 典型产品的C EF查询-类别关系?
使用实体框架,尝试获取有关此典型用例的查询首选基于方法的语法的帮助: 有一个products表,如: 所有者 产品ID 产品类别ID 产品信息等 有一个典型的产品类别映射表,如: 某个主键 所有者 类别 产品ID 排序器 此设置允许一个产品处于多个类别中,并且在每个类别中都有自己的排序顺序。此外,我们在所有表中都有ownerId,因为每个所有者只能看到自己的数据 现在,给定categtoryId和ownerId,我们需要找到该类别的所有产品,按排序器排序 我们该怎么写呢Entity framework 典型产品的C EF查询-类别关系?,entity-framework,join,Entity Framework,Join,使用实体框架,尝试获取有关此典型用例的查询首选基于方法的语法的帮助: 有一个products表,如: 所有者 产品ID 产品类别ID 产品信息等 有一个典型的产品类别映射表,如: 某个主键 所有者 类别 产品ID 排序器 此设置允许一个产品处于多个类别中,并且在每个类别中都有自己的排序顺序。此外,我们在所有表中都有ownerId,因为每个所有者只能看到自己的数据 现在,给定categtoryId和ownerId,我们需要找到该类别的所有产品,按排序器排序 我们该怎么写呢 非常感谢 您可以尝试使用
非常感谢 您可以尝试使用以下内容:
// Instanciate your context.
// Do it the way you've already done it, it's here only for example.
DbContext bd = new DbContext();
// The query :
List<Products> listProducts = new List<Products>();
listProducts = db.Products.Where(p => (db.ProductsCategories.Where(pc => pc.CategoryID == categoryID && pc.OwnerID == ownerID).Select(pc => pc.ProductID).OrderBy(pr => pr.sortOrder).ToList()).Contains(p.ProductID)).ToList();
通过这种方式,使用产品类别映射category ID和ownerID是您注入的数据,并保留排序。谢谢!对Contains操作符的性能有什么想法吗?比如,如果一个类别有数千种产品。或者,使用一些表联接会更好吗?显然,如果您的表包含数千个产品,contains操作符将遍历从ProductCategories表查询的整个id列表。所以,也许加入一个团队对表现会更好,但我认为两者都会起作用。如果您需要Join方面的帮助,这里有一个链接:刚刚测试了它并注意到一个问题:排序似乎没有按预期工作-我认为Contains操作符没有保留顺序。我解决了排序问题,重新对结果集排序基本上我先获取ProductID,然后获取产品,根据ProductID对产品进行排序。谢谢