簡體   English   中英

在來自實體框架的查詢中檢查字符串是否不包含 C# 中的字符串數組的字符串

[英]Check if string does not contain strings of an array of string in C# in query from Entity Framework

我試圖獲得一個特殊的計數,我想刪除其中 userKeysActionsArray 是一個包含 integer 的字符串的結果,就像這樣(JSON 數組):[88254,8547,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;

您可以在 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();

你可以這樣做 -

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM