使用 Linq 选择列表内的列表

本文关键字:列表 选择 Linq 使用 | 更新日期: 2023-09-27 17:57:03

使用 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>();
我需要将应用程序="

应用程序ame"的列表和姓氏="姓氏"的用户选择到一个列表中。

使用 Linq 选择列表内的列表

如果要

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

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

(from model in list
 where model.application == "applicationname"
 from user in model.users
 where user.surname == "surname"
 select new { user, model }).ToList();
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()
    });

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

List<Model> usrList  = 
(list.Where(n => n.application == "applicationame").ToList());
usrList.ForEach(n => n.users.RemoveAll(n => n.surname != "surname"));