无法在 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 个查询。
我的查询是,
我在这里尝试获取区域名称匹配的区域 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 个查询。