linq EF核心5或6,如何根据共同类别选择所有相关产品

thtygnil  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(131)

我在ProductsCategories之间有多对多关系,我想选择EF Core 5、6中的所有相关产品(按任何共同类别)。
我可以通过在产品类别上循环然后区分它们来添加每个共有类别的所有产品,但这根本不是一个好的解决方案,我确信有一个单一的EF Linq查询可以完成这项工作。
关系是这样的:

Products - ProductInCategories - Categories
var allProducts = Product.ProductInCategories
                         .SelectMany(t => t.Category.ProductInCategories)
                         .Select(t => t.Product)
                         .Distinct().ToList();

这既不好也不高效,请让我知道最好的解决方案。

drnojrws

drnojrws1#

对于选择所有相关类别的产品:

var allProducts = _context.Product.Include(a => a.ProductInCategories)
                                    .ThenInclude(a => a.Category)
                                    .ToList();

对于选择特定类别的所有产品(例如,类别ID等于1):

var allProducts = _context.Product.Include(a => a.ProductInCategories)
                                    .ThenInclude(a => a.Category)
                                    .Where(a => a.ProductInCategories.Any(c => c.CategoryId == 1))
                                    .ToList();

如果您只想选择特定产品而不显示相关类别:

var allProducts = _context.Product
                           .Where(a => a.ProductInCategories.Any(c => c.CategoryId == 1))
                           .ToList();

相关问题