Использование списка выбора Linq внутри списка
Использование LINQ для выбора из списка в списке
public class Model
{
public string application { get; set; }
public List<Users> users { get; set; }
}
public class Users
{
public string name { get; set; }
public string surname { get; set; }
}
List<Model> list = new List<Model>();
Мне нужно выбрать список, где application = "applicationame" и пользователи, где фамилия = "фамилия" в один список.
Ответы
Ответ 1
Если вы хотите отфильтровать модели на applicationname
, а остальные модели - на surname
:
List<Model> newList = list.Where(m => m.application == "applicationname")
.Select(m => new Model {
application = m.application,
users = m.users.Where(u => u.surname == "surname").ToList()
}).ToList();
Как вы можете видеть, ему необходимо создать новые модели и списки пользователей, следовательно, это не самый эффективный способ.
Если вы не хотите фильтровать список пользователей, но фильтруйте модели пользователями с хотя бы одним пользователем с заданным именем пользователя, используйте Any
:
List<Model> newList = list
.Where(m => m.application == "applicationname"
&& m.users.Any(u => u.surname == "surname"))
.ToList();
Ответ 2
Вы должны использовать метод расширения SelectMany
или его эквивалентный синтаксис в чистом LINQ.
(from model in list
where model.application == "applicationname"
from user in model.users
where user.surname == "surname"
select new { user, model }).ToList();
Ответ 3
list.Where(m => m.application == "applicationName" &&
m.users.Any(u => u.surname=="surname"));
если вы хотите фильтровать пользователей по комментариям TimSchmelter, вы можете использовать
list.Where(m => m.application == "applicationName")
.Select(m => new Model
{
application = m.application,
users = m.users.Where(u => u.surname=="surname").ToList()
});
Ответ 4
После моей предыдущей катастрофы ответа я попытаюсь сделать что-то еще.
List<Model> usrList =
(list.Where(n => n.application == "applicationame").ToList());
usrList.ForEach(n => n.users.RemoveAll(n => n.surname != "surname"));