在实体框架的查询中,检查字符串是否不包含C#中字符串数组的字符串

在实体框架的查询中,检查字符串是否不包含C#中字符串数组的字符串,c#,arrays,string,entity-framework,contains,C#,Arrays,String,Entity Framework,Contains,我试图获得一个特殊的计数,其中我想删除userKeysActionsArray是一个包含整数的字符串的结果,如下所示(JSON数组):[8825485478569] 但是,当我尝试使用contains方法和NOT运算符删除时,我无法获得预期的正确数字 我不知道如何解决这个问题 非常感谢你的帮助 int count; var query = (from a in _db.ApplicationSet from h in a.ApplicationApprobationS

我试图获得一个特殊的计数,其中我想删除userKeysActionsArray是一个包含整数的字符串的结果,如下所示(JSON数组):[8825485478569]

但是,当我尝试使用contains方法和NOT运算符删除时,我无法获得预期的正确数字

我不知道如何解决这个问题

非常感谢你的帮助

int count;

var query = (from a in _db.ApplicationSet
             from h in a.ApplicationApprobationStatusHistorySet
             from u in a.Mission.MissionUserSet
             where a.Mission.isDeleted == false
                && a.Mission.isArchived == false
                && a.isRefused == false
                && a.ApplicationApprobationStatus.shortCode == "APPLICATION_APPROBATION_STATUS_LM_WAITING"
                && u.userKey == ContextUser.id
                && h.ApplicationApprobationStatus.shortCode == "APPLICATION_APPROBATION_STATUS_LM_WAITING" && h.isDeleted == false
              orderby a.applicationDate
              select new ApplicationCandidateListing
              {
                  applicationKey = a.id,
                  missionKey = a.Mission.id,
                  candidateKey = a.Candidate.id,
                  statusKey = a.ApplicationStatus.id,
                  clientKey = a.Mission.Client.id,
                  candidateFirstName = a.Candidate.firstName,
                  candidateLastName = a.Candidate.lastName,
                  clientLabel = a.Mission.Client.name,
                  statusLabel = a.ApplicationStatus.label,
                  missionLabel = a.Mission.label,
                  applicationDate = a.applicationDate,
                  isCVreserveList = a.isCVreserveList,
                  isCVviewed = a.isCVviewed,
                  refuseDate = a.refuseDate,
                  isShortListed = a.isShortListed,
                  candidateGroupShortcode = a.Candidate.CandidateGroup.shortCode,
                  approbationStatusIcons = a.ApplicationApprobationStatus.iconCSS,
                  approbationStatusShortCode = a.ApplicationApprobationStatus.shortCode,
                  isInternal = a.Candidate.isInternal,
                  lineManagerKey = ContextUser.id,
                  userKeysActionsArray = h.userKeysActionsArray,
                  commentCount = a.ApplicationCommentSet.Where(ac => ac.isPrivateLineManager != true).Count()
              }).Distinct();

string chance1 = "[" + ContextUser.id.ToString() + "]";
string chance2 = "[" + ContextUser.id.ToString() + ",";
string chance3 = "," + ContextUser.id.ToString() + ",";
string chance4 = "," + ContextUser.id.ToString() + "]";

var values = new[] { chance1, chance2, chance3, chance4 };
query.Where(q => !(values.Any(q.userKeysActionsArray.Contains)));  

count = query.Count();

return count;

您可以在foreach中累积查询的where条件:

var query = // redacted

string chance1 = "[" + ContextUser.id.ToString() + "]";
string chance2 = "[" + ContextUser.id.ToString() + ",";
string chance3 = "," + ContextUser.id.ToString() + ",";
string chance4 = "," + ContextUser.id.ToString() + "]";

var values = new[] { chance1, chance2, chance3, chance4 };
foreach(var value in values)
{
    query = query.Where(a => !a.userKeysActionsArray?.Contains(value) ?? true);
}
return query.Count();

您可以在foreach中累积查询的where条件:

var query = // redacted

string chance1 = "[" + ContextUser.id.ToString() + "]";
string chance2 = "[" + ContextUser.id.ToString() + ",";
string chance3 = "," + ContextUser.id.ToString() + ",";
string chance4 = "," + ContextUser.id.ToString() + "]";

var values = new[] { chance1, chance2, chance3, chance4 };
foreach(var value in values)
{
    query = query.Where(a => !a.userKeysActionsArray?.Contains(value) ?? true);
}
return query.Count();

你可以按下面的方法做-

query.Where(q => !(
(q.userKeysActionsArray.Contains(chance1) ||
q.userKeysActionsArray.Contains(chance2) || 
q.userKeysActionsArray.Contains(chance3) || 
q.userKeysActionsArray.Contains(chance4))));

你可以按下面的方法做-

query.Where(q => !(
(q.userKeysActionsArray.Contains(chance1) ||
q.userKeysActionsArray.Contains(chance2) || 
q.userKeysActionsArray.Contains(chance3) || 
q.userKeysActionsArray.Contains(chance4))));


我相信Contains是一个需要输入参数的方法,所以请尝试将最后一行从
q.userKeysActionsArray.Contains
更改为
q.userKeysActionsArray.Contains(输入值)
您缺少了count变量的矫揉造作,是不是输入错误?@ArwynFr yes抱歉输入错误:-)将更新帖子。Thanks@Scopperloit我不知道如何改变它来测试4种可能性。像这样<代码>查询.Where(q=>!((q.userKeysActionsArray.Contains(chance1)和&q.userKeysActionsArray.Contains(chance2)和&q.userKeysActionsArray.Contains(chance3)和&q.userKeysActionsArray.Contains(chance4))每个机会是数组还是单个字符串?我认为Contains是一个需要输入参数的方法,因此请尝试将最后一行从
q.userKeysActionsArray.Contains
更改为
q.userKeysActionsArray.Contains(输入值)
您缺少对count变量的影响,这是打字错误吗?@ArwynFr yes对不起,打字错误:-)将更新帖子。Thanks@Scopperloit我不知道如何改变它来测试4种可能性。像这样<代码>查询.Where(q=>!((q.userKeysActionsArray.Contains(chance1)和&q.userKeysActionsArray.Contains(chance2)和&q.userKeysActionsArray.Contains(chance3)和&q.userKeysActionsArray.Contains(chance4))每一次机会都是数组还是单个字符串?我将尝试此方法,字符串“userKeysActionsArray”可能为空这一事实会导致问题吗?它工作正常!非常感谢!:-)这也是我应该做的,
foreach
是你的朋友。如果您担心NullReferenceException,请始终首先在布尔表达式中检查null。他们总是从左到右评估。尝试
query.Where(a=>a.userKeysActionsArray!=null&&!a.userKeysActionsArray.Contains(value))我添加了一个空条件运算符和一个空合并运算符来处理空情况。我将尝试此方法,字符串“userKeysActionsArray”可能为空这一事实会导致问题吗?它工作正常!非常感谢!:-)这也是我应该做的,
foreach
是你的朋友。如果您担心NullReferenceException,请始终首先在布尔表达式中检查null。他们总是从左到右评估。尝试
query.Where(a=>a.userKeysActionsArray!=null&&!a.userKeysActionsArray.Contains(value))我添加了一个null条件运算符和一个null合并运算符来处理null情况