簡體   English   中英

Linq - 過濾內部列表

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

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