Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 典型产品的C EF查询-类别关系?_Entity Framework_Join - Fatal编程技术网

Entity framework 典型产品的C EF查询-类别关系?

Entity framework 典型产品的C EF查询-类别关系?,entity-framework,join,Entity Framework,Join,使用实体框架,尝试获取有关此典型用例的查询首选基于方法的语法的帮助: 有一个products表,如: 所有者 产品ID 产品类别ID 产品信息等 有一个典型的产品类别映射表,如: 某个主键 所有者 类别 产品ID 排序器 此设置允许一个产品处于多个类别中,并且在每个类别中都有自己的排序顺序。此外,我们在所有表中都有ownerId,因为每个所有者只能看到自己的数据 现在,给定categtoryId和ownerId,我们需要找到该类别的所有产品,按排序器排序 我们该怎么写呢 非常感谢 您可以尝试使用

使用实体框架,尝试获取有关此典型用例的查询首选基于方法的语法的帮助:

有一个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对产品进行排序。谢谢