LINQ - упорядочение списка объектов на основе определенного значения - PullRequest
0 голосов
/ 11 октября 2010

Я новичок в LINQ.У меня есть такой класс:

public class StudentResults
{

    public int Id { get; set; }

    public ResultsStatus StatusResult { get; set; }

    public string Message { get; set; }

    public StudentDetails Detail { get; set; }

}

Есть метод, который возвращает список указанного выше класса в переменную

Мне нужно пройти через эту переменную и разделить студентов на две части.разные классы.PassedStudents, FailedStudents на основе ResultsStatus.

Вот что я пробовал, но это не работает

 var studIds = from r in StudList
 group r by r.Id into GroupedData
  select new 
  {
   //what to put here
  };
  foreach(var crs in studIds)
  {
   //what to put here to get all student names from the Detail property.
  }

Есть ли другой способ?

Ответы [ 3 ]

3 голосов
/ 11 октября 2010

Лично я бы отнесся к этому как к двум запросам:

var passed = StudList.Where(student => student.StatusResult == ResultStatus.Passed);
var failed = StudList.Where(student => student.StatusResult == ResultStatus.Failed);

Console.WriteLine("Passed...");
foreach(var student in passed)
   Console.WriteLine(student.Detail.Name);

Console.WriteLine("Failed...");
foreach(var student in failed)
   Console.WriteLine(student.Detail.Name);
2 голосов
/ 11 октября 2010

Звучит так, как будто вы хотите 2 списка: один для неудачного и один для пройденного.

Попробуйте это:

List<StudentResults> failed = StudList.Where(x=>x.ResultStatus=="Failed")
                                      .ToList();

List<StudentResults> passed = StudList.Where(x=>x.ResultStatus=="Passed")
                                      .ToList();
1 голос
/ 11 октября 2010

Просто используйте «где». Например, чтобы получить все «PassedStudents»:

var passedStudents = from student in StudentList
                     where student.StatusResult == ResultsStatus.PassedStudent
                     select student;

foreach (var student in passedStudents)
{
    Console.WriteLine("[{0}.] {1} passed.", student.Id, student.Detail.Name);
}

Вы также можете написать запрос, используя лямбда-выражения:

var passedStudents = 
    StudentList.Where(student => student.StatusResult == ResultsStatus.PassedStudent);
...