Я пытаюсь отфильтровать список на основе этих классов - результатом должен быть список со всеми компьютерами, на которых есть сеансы, которые соответствуют условию поиска, но только с этими сеансами.
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 - я уверен, что есть, но я не могу найти его.
Любые предложения / указатели будут с благодарностью.