如果列表不为null,则将Intersect添加到查询

时间:2015-04-28 00:21:15

标签: c# linq entity-framework

我正在尝试使用LINQ查询来查询我的实体框架。我需要做的是添加我正在构建的查询,如果某些元素为真。

我从

开始
IQueryable<Jobs> GetJobs(list<string> staff, list<string> clients
{
var query = dbContext.Jobs.Where(a=> (a.JobName.Contains("New Job"));

如果填充了列表,我需要添加查询

if (staff.Count > 0) {
    query = query.where(a=>staff.Contains(a.staff));
}

if (client.Count > 0) {
    query = query.where(a => a.Clients.select(b=>b.Name).Intersect(client).Any();

员工是1:1的关系,客户是多对多的。

如果我只包含工作人员或客户端,则查询有效,但当我同时包含人员或客户端时,它始终返回0。

1 个答案:

答案 0 :(得分:0)

如果你想获得一系列工作,那就

  • JobName喜欢“新工作”和
  • 在给定的Staff列表和
  • 中有staff个属性
  • 至少有一个来自给定clients列表的客户

然后,这应该工作。

IQueryable<Jobs> GetJobs(list<string> staff, list<string> clients)
{
    var query = dbContext.Jobs.Where(x => x.JobName.Contains("New Job"));

    if (staff != null && staff.Count > 0)
        query = query.Where(x => staff.Contains(x.Staff));

    if (clients != null && clients.Count > 0)
        query = query.Where(x => x.Clients.Any(c => clients.Contains(c.Name)));

    return query;
}