[英]LINQ Filter values on list values using contain
我知道關於這個問題有幾個 SO 帖子,我在提出當前解決方案時使用了它們。
查看下面的 4 行代碼,前三行不起作用,但第四行是 (?.),我不明白為什么會這樣:前兩行只檢查單個字符串,“其中包含 'string 的值'”,后兩個對照字符串列表檢查值“其中包含此列表中任何字符串的值”
contactsDynamicResponses.Values.Where(cdr => cdr.Firstname.Contains(firstName)).ToList();
contactsDynamicResponses.Values.Where(cdr => cdr.Lastname.Contains(lastName)).ToList();
contactsDynamicResponses.Values.Where(cdr => accountIdsList.Any(ail => cdr.AccountId.Contains(ail))).ToList();
contactsDynamicResponses.Values.Where(cdr => contactIdsList.Any(cil => cdr.ContactId.Contains(cil))).ToList();
我的目標是根據輸入到 function 中的搜索過濾器過濾列表。 下面是我得到的錯誤,這讓我認為contactsDynamicResponses.Values
是這里的問題,但我迷路了。
System.NullReferenceException:“對象引用未設置為 object 的實例。” Project.Entities.Contact.Models.Dynamics.ContactDynamicsResponse.Firstname.get 返回 null。
行看起來如何完整:
contactsDynamicResponses.Values = string.IsNullOrEmpty(firstName) ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => cdr.Firstname.Contains(firstName)).ToList();
contactsDynamicResponses.Values = string.IsNullOrEmpty(lastName) ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => cdr.Lastname.Contains(lastName)).ToList();
contactsDynamicResponses.Values = accountIdsList == null ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => accountIdsList.Any(ail => cdr.AccountId.Contains(ail))).ToList();
contactsDynamicResponses.Values = contactIdsList == null ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => contactIdsList.Any(cil => cdr.ContactId.Contains(cil))).ToList();
歡迎任何想法! 謝謝!
在查詢中添加空檢查:
contactsDynamicResponses.Values.Where(cdr => cdr.Firstname != null &&
cdr.Firstname.Contains(firstName)).ToList();
例外情況是FirstName
是 null。
還要在其他查詢中添加此檢查,例如LastName
進行空檢查的更短方法:
contactsDynamicResponses.Values.Where(cdr =>
cdr.Firstname?.Contains(firstName) == true
).ToList();
== true
看起來有點奇怪,但那是因為比較的結果是bool?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.