C# 在列表中使用Linq选择列表

C# 在列表中使用Linq选择列表,c#,.net,linq,C#,.net,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<M

使用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>();
公共类模型
{
公共字符串应用程序{get;set;}
公共列表用户{get;set;}
}
公共类用户
{
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
}
列表=新列表();
我需要在一个列表中选择list where application=“applicationame”和users where surname=“surname”。

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

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

如果要按
applicationname
筛选模型,并按
姓氏
筛选其余模型:

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();
如果您想按照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"));
列表usrList=
(list.Where(n=>n.application==“applicationame”).ToList();
usrList.ForEach(n=>n.users.RemoveAll(n=>n.name!=“姓氏”);

您想要的输出是什么?模型列表?用户列表?就像您使用匿名类一样。他需要选择姓氏为“=”的用户,而不是至少包含一个姓氏为“=”的用户的模型。因此,我认为他想过滤每个过滤模型中的用户。@TimSchmelter the kewword是:
我认为他想……
。是的,我不确定,但OP就是这么说的。否则,他应该说他想要的模型带有application=“applicationame”,其中包含一个姓氏为“=”的用户。在您的foreach“n”中引用的是主数据源(内存中)中的对象,因此您正在修改源列表中的对象!Plus-ForEach返回void,您假定它返回IEnumerable。
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"));