[英]Linq - filter inner list
我正在嘗試基於此類過濾列表 - 結果應該是一個列表,其中包含與搜索條件匹配的會話的所有機器,但只有那些會話。
class Machine {
public string collectionName { get; set; }
public string machineName { get; set; }
public bool status { get; set; }
public List<Session> sessionList { get; set; }
}
class Session {
public string userId { get; set; }
public string userName { get; set; }
public string computerName { get; set; }
public IPAddress ipAddress { get; set; }
}
List<Machine> allMachineData;
var auxfindResults = (from machine_item in allMachineData
from session_item in machine_item.sessionList
where (session_item.userId.ToUpperInvariant().Contains(searchTerm.ToUpperInvariant())
|| session_item.userName.ToUpperInvariant().Contains(searchTerm.ToUpperInvariant()))
select machine_item).ToList();
我得到了會話符合條件的所有機器的列表,但我也得到了我不想要的結果,即不符合條件的會話。
如果我嘗試:
var auxfindResults = (from machine_item in allMachineData
from session_item in machine_item.sessionList
where (session_item.userId.ToUpperInvariant().Contains(searchTerm.ToUpperInvariant())
|| session_item.userName.ToUpperInvariant().Contains(searchTerm.ToUpperInvariant()))
select session_item).ToList();
我得到了符合條件的所有會話,但顯然我失去了“機器”部分
我有一個使用循環的有效解決方案,但我不喜歡它。 有沒有辦法使用 linq 做到這一點 - 我確定有,但我找不到。
任何建議/指針將不勝感激。
您還需要過濾您選擇的會話。
使用 Linq 方法語法:
searchTerm = searchTerm.ToLower();
var result = allMachineData
.Where(m => m.sessionList.Any(s => s.userId.ToLower().Contains(searchTerm) || s.userName.ToLower().Contains(searchTerm)))
.Select(m => new Machine
{
collectionName = m.collectionName,
machineName = m.machineName,
status = m.status,
sessionList = m.sessionList.Where(s => s.userId.ToLower().Contains(searchTerm) || s.userName.ToLower().Contains(searchTerm)).ToList(),
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.