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

application="applicationame"のリストとsurname="surname"のユーザーを1つのリストに選択する必要があります。

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

ご覧のとおり、新しいモデルとユーザーリストを作成する必要があるため、最も効率的な方法ではありません。

代わりに、ユーザーのリストをフィルタリングせずに、特定のユーザー名を持つ少なくとも1人のユーザーを持つユーザーでモデルをフィルタリングする場合は、次を使用します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 に答える