20

使用 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>();

我需要选择应用程序=“应用程序名称”的列表和姓氏=“姓氏”的用户到一个列表中。

4

4 回答 4

36

如果您想通过以下方式过滤模型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();
于 2013-02-02T16:37:29.363 回答
11

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

(from model in list
 where model.application == "applicationname"
 from user in model.users
 where user.surname == "surname"
 select new { user, model }).ToList();
于 2013-02-02T16:33:52.197 回答
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()
    });
于 2013-02-02T16:39:27.077 回答
-1

在我之前的回答灾难之后,我将尝试其他方法。

List<Model> usrList  = 
(list.Where(n => n.application == "applicationame").ToList());
usrList.ForEach(n => n.users.RemoveAll(n => n.surname != "surname"));
于 2013-02-02T16:57:35.683 回答