使用 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"的列表和姓氏="姓氏"的用户选择到一个列表中。
如果要
按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"));