Линк список списков в один список - PullRequest
0 голосов
/ 18 февраля 2020

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

var results = StudentsList.GroupBy(x => x.GroupID)
    .Where(g => !g.Any(p => p.Student == "Adam") && g.Any(x => x.University == "OPQ"))
    .Select(g => 
            {
                var firstItem = g.First(x => x.University == "OPQ");
                firstItem.IsQualified = true;

                return firstItem;
            }).ToList();

При сохранении исходной функциональности я хочу дополнительно -

  • Если существует, обновите IsQualified= true для ВСЕХ студентов в одной группе с University!= "OPQ" и Course= "HR" (группа 2). Если не существует, просто игнорируйте (Группа 5)

Выход

  • Дональд, Серебро, Эмити (все Группа 2) и Белый ( Группа 5).

То, что я пробовал

Чуть ниже линии "firstItem.IsQualified = true;", я добавил -

var otherItems=g.Any(x=>x.University != "OPQ" && x.Course =="HR");
otherItems.IsQualified= true;

Мой код

    List<StudentInfo> StudentsList = new List<StudentInfo>();

    // Group 1
    StudentsList.Add( new StudentInfo { Student="Gungun", University="cdf", Course="GD", GroupID = 1, IsQualified=false});
    StudentsList.Add( new StudentInfo { Student="John", University="abc", Course="ACC", GroupID = 1, IsQualified=false});
    StudentsList.Add( new StudentInfo { Student="Jack", University="def", Course="CS", GroupID = 1, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Peter", University="abc", Course="GD", GroupID = 1, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Lemity", University="abc", Course="CS", GroupID = 1, IsQualified=false} );

    // Group 2
    StudentsList.Add( new StudentInfo { Student="Donald", University="def", Course="HR",GroupID = 2, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Olivia", University="ggh", Course="RC",GroupID = 2, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Silver", University="tcs", Course="HR",GroupID = 2, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Carl", University="yyz", Course="AC",GroupID = 2, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Emity", University="OPQ", Course="AC",GroupID = 2, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Emma", University="OPQ", Course="GD", GroupID = 2, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Alan", University="OPQ", Course="GD", GroupID = 2, IsQualified=false} );

    // Group 3
    StudentsList.Add( new StudentInfo { Student="Adam", University="yub", Course="CS", GroupID = 3, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Jacob", University="OPQ", Course="AC",GroupID = 3, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Matthew", University="OPQ", Course="HR", GroupID = 3, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Saint", University="abc", Course="MNGT",  GroupID = 3, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Joshua", University="qer", Course="MNGT",  GroupID = 3, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Aubrey", University="fef", Course="MNGT",  GroupID = 3, IsQualified=false} );

    // Group 4
    StudentsList.Add( new StudentInfo { Student="Caleb", University="DEF", Course="HR", GroupID = 4, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Anna", University="ABC", Course="HR", GroupID = 4, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Chill", University="GHI", Course="GD", GroupID = 4, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Alexis", University="JKL", Course="CS", GroupID = 4, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="Zoe", University="MNO", Course="MNGT", GroupID = 4, IsQualified=false} );

    // Group 5
    StudentsList.Add( new StudentInfo { Student="Dylan", University="PQR", Course="ACC", GroupID = 5, IsQualified=false} );
    StudentsList.Add( new StudentInfo { Student="White", University="OPQ", Course="CE", GroupID = 5, IsQualified=false} );

public class StudentInfo
{
  public string Student { get; set; }
  public string University { get; set; }
  public string Course { get; set; }
  public int GroupID { get; set; }
  public bool IsQualified {get; set;}
}

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Демонстрация при выполнении tnet скрипка

Вместо .Select(), вы также можете использовать SelectMany для достижения этого.

    var results = StudentsList.GroupBy(x => x.GroupID)
                              .Where(g => !g.Any(p => p.Student == "Adam") && g.Any(x => x.University == "OPQ"))
                              .SelectMany(g => 
                                    {
                                        var firstItem = g.First(x => x.University == "OPQ");
                                        firstItem.IsQualified = true;

                                        var otherItems = g.Where(x => x.University != "OPQ" && x.Course == "HR")
                                                          .Select(z => 
                                                                  {
                                                                      var item = z;
                                                                      item.IsQualified = true;
                                                                      return item;
                                                                  }).ToList();
                                        otherItems.Add(firstItem);
                                        return otherItems;
                                    }).ToList();

Выход

Group:2 Student:Donald IsQualified:True
Group:2 Student:Silver IsQualified:True
Group:2 Student:Emity IsQualified:True
Group:5 Student:White IsQualified:True
1 голос
/ 18 февраля 2020

Не могли бы вы попробовать это:

        var otherItems = StudentsList.Where(x => x.University != "OPQ" && x.Course == "HR");
        foreach (var otherItem in otherItems)
        {
            otherItem.IsQualified = true;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...