簡體   English   中英

LINQ 使用包含過濾列表值上的值

[英]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.

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