首页 > 解决方案 > 实体框架 - 获取记录:逗号分隔的字符串(或列表) 包含在实体集合中

问题描述

给定实体

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public ICollection<Category> Categories { get; set; }
}

public class Category
{
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }
    public ICollection<Product> Products { get; set; }
}

我想查询 Products 表以检索具有以逗号分隔列表形式给出的任何类别的产品。

因此,例如,我想获得类别为“电子产品”和/或“厨房设备”的产品

如果它不是一个集合,我会这样做:例如

Products.Where(p => "Oven,Kettle".Contains(p.ProductName));

但这显然不起作用:

Products.Where(p => "Electronics,Kitchen Equipment".Contains(p.Categories.CategoryName));

也试过:

Products.Where(p => "Electronics,Kitchen Equipment".Any(x => p.Categories.Any(pcat => pcat.CategoryName == x.ToString()))).Take(100);

标签: c#linqentity-framework-core

解决方案


您必须将 IEnumerable 传递给 Where 子句:

var names = "Oven,Kettle".Split(',');
var query = Products.Where(p => names.Contains(p.ProductName));

推荐阅读