无法在 LINQ to Entity VS 2017 中使用包含我的查询

Unable to use Contains in LINQ to Entity VS 2017 my query attached

我的查询是,

我在这里尝试获取区域名称匹配的区域 ID,

var Rid = db.Regions.Where(p => SqlFunctions.PatIndex("%" + Search + "%", p.RegionName) > 0).Select(p => p.RegionId).ToList();

更改 Id 的逗号分隔字符串,

string joined = string.Join(",", Rid);

正在尝试获取所有与 Id 的逗号分隔相关的记录 string joined

var employ = db.Employees.Include(f => f.City).Include(f => f.Region).Where(p=>p.RegionId);

问题是当我尝试在 where 子句中使用时我们没有包含 ??

希望得到您的建议

在 Linq 中我们有 Any:

var employ = db.Employees.Include(f => f.City)
                         .Include(f => f.Region)
                         .Where(p=> Rid.Any(rid => rid == p.RegionId));

或:

var employ = db.Employees.Include(f => f.City)
                         .Include(f => f.Region)
                         .Where(p=> Rid.Contains(p.RegionId));

现在它将 select 这些员工在 Rid 列表中具有区域 ID。

您应该使用虚拟属性映射您的关系:

public class Employee
{
    ...

    public int RegionId { get; set; }
    [ForeignKey("RegionId")]
    public virtual Region Region { get; set; }

    ...
}

public class Region
{
    ...

    [ForeignKey("RegionId")]
    public virtual ICollection<Employee> Employees { get; set; }

    ...
}

然后你可以直接在你的where语句中使用它:

var employees = db.Employees
                  .Where(a => a.Region.RegionName.Contains(Search));

var employees = db.Regions
                  .Where(a => a.RegionName.Contains(Search)
                  .SelectMany(a => a.Employees);

通过这种方式,您可以发送更少的数据来进行查询,请考虑选择了 100 个区域 ID 的情况。此外,您正在执行 1 个查询而不是 2 个查询。