LINQ Получить результаты объекта, содержащегося в другом списке, по более чем одному значению - PullRequest
1 голос
/ 02 августа 2020

У меня есть два списка: один из учеников класса, в котором есть все отличники, и другой, в котором есть все ученики и их класс, допустим, я хочу получить всех учеников и их классы, которые находятся в списке отличников:

public class Kids 
{
    string FirstName;
    string LastName;
    int Age;
    int Grade; 
}

public class Students
{
    string FirstName;
    string LastName;
    string Classroom; 
}

Я думал использовать что-то вроде этого запроса:

List<Students> students = classroom
         .Where(i => honorKids
                    .Select(j => j.FirstName)
                    .Contains(i.FirstName) && honorKids
                           .Select(j => j.LastName)
                           .Contains(i.LastName)
               )

проблема в том, что нет корреляции между именем и фамилией ребенка, поэтому, например, если есть является отличником по имени Джон Безоз, другим отличником Марком Смитом и отличным учеником по имени Джон Смит, он вернется в качестве отличника, поскольку его имя и фамилия находятся в списке отличников, но не в одной строке.

как мне провести сравнение, чтобы убедиться, что имя и фамилия находятся в списке, но в одной строке?

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Вам не нужно выполнять Select, попробуйте вместо этого использовать Any с соответствующим предикатом:

List<Students> students = classroom
    .Where(i => honorKids.Any(j => j.FirstName == i.FirstName && j.LastName == i.LastName))
    .ToList();
1 голос
/ 02 августа 2020

Для полноты вы также можете использовать эффективный Join между обоими списками:

var honorStudents = from student in classRoom
                    join kid in honorKids 
                    on new {student.FirstName, student.LastName} equals new {kid.FirstName, kid.LastName}
                    select student;
                        
List<Students> students = honorStudents.ToList();

Есть разница между результатом этого и подходом Гуру, если возможно, что есть " дубликат "honorKids. Тогда объединение вернет все совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...