在列表中使用Linq选择列表

Ren*_*eno 14 .net c# linq

使用LINQ如何从List中的List中进行选择

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>();
Run Code Online (Sandbox Code Playgroud)

我需要选择application ="applicationame"的列表和surname ="surname"的用户到一个列表中.

Tim*_*ter 28

如果您想通过以下方式过滤模型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();
Run Code Online (Sandbox Code Playgroud)

如您所见,它需要创建新模型和用户列表,因此它不是最有效的方法.

如果您不希望过滤用户列表但是至少有一个用户具有给定用户名的用户过滤模型,请使用Any:

List<Model> newList = list
    .Where(m => m.application == "applicationname"
            &&  m.users.Any(u => u.surname == "surname"))
    .ToList();
Run Code Online (Sandbox Code Playgroud)


Céd*_*non 9

您必须SelectMany在纯LINQ中使用扩展方法或其等效语法.

(from model in list
 where model.application == "applicationname"
 from user in model.users
 where user.surname == "surname"
 select new { user, model }).ToList();
Run Code Online (Sandbox Code Playgroud)