【问题标题】:Check if string does not contain strings of an array of string in C# in query from Entity Framework在来自实体框架的查询中检查字符串是否不包含 C# 中的字符串数组的字符串
【发布时间】:2021-04-13 00:31:33
【问题描述】:

我试图获得一个特殊的计数,我想删除结果,其中 userKeysActionsArray 是一个包含整数的字符串,像这样(JSON 数组):[88254,85​​47,8569]

但是当我尝试使用 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;

【问题讨论】:

  • 我认为 Contains 是一种需要输入参数的方法,因此请尝试将倒数第二行从 q.userKeysActionsArray.Contains 更改为 q.userKeysActionsArray.Contains(input value)
  • 你缺少对 count 变量的矫揉造作,是错字吗?
  • @ArwynFr 是的抱歉错字错误:-) 将更新帖子。谢谢
  • @Scopperloit 我不知道如何更改它来测试 4 种可能性。像这样? query.Where(q => !((q.userKeysActionsArray.Contains(chance1) && q.userKeysActionsArray.Contains(chance2) && q.userKeysActionsArray.Contains(chance3) && q.userKeysActionsArray.Contains(chance4))));
  • 每个机会是一个数组还是一个字符串?

标签: c# arrays string entity-framework contains


【解决方案1】:

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

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();

【讨论】:

  • 我会试试这个,有没有可能字符串“userKeysActionsArray”可能为空而导致麻烦?
  • 我也会这样做,foreach 是你的朋友。如果您担心 NullReferenceExceptions,请始终在布尔表达式中首先检查 null。他们总是从左到右评估。试试query.Where(a => a.userKeysActionsArray != null && !a.userKeysActionsArray.Contains(value));
  • 我添加了一个空条件运算符和一个空合并运算符来处理空情况
【解决方案2】:

你可以这样做-

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

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2011-01-21
    • 2020-11-28
    • 1970-01-01
    • 2021-06-10
    • 2021-12-20
    • 2021-12-14
    • 2012-06-23
    • 2015-09-08
    相关资源
    最近更新 更多