Подтвердить что ты не робот

Использование списка выбора 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" и пользователи, где фамилия = "фамилия" в один список.

4b9b3361

Ответ 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"));