2013-10-14 5 views
0

Я прошел через приведенный ниже код, но не понимаю, как групповое предложение делает группировкуgroup by clause in LINQ

Пожалуйста, помогите в этом. Я новичок в C#.

public static List<Student> GetStudents() 
     { 
      // Use a collection initializer to create the data source. Note that each element 
      // in the list contains an inner sequence of scores. 
      List<Student> students = new List<Student> 
     { 
      new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 72, 81, 60}}, 
      new Student {First="Claire", Last="O'Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}}, 
      new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {99, 89, 91, 95}}, 
      new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {72, 81, 65, 84}}, 
      new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {97, 89, 85, 82}} 
     }; 

      return students; 

     } 
List<Student> students = GetStudents(); 

      // Write the query. 
      var studentQuery = 
       from student in students 
       let avg = (int)student.Scores.Average() 
       group student by (avg == 0 ? 0 : avg/10); 

Я не понимаю, как был создан StudentQuery. Спасибо заранее.

+1

Это ** не ** вопрос ** новый ученик ** должен заботиться, я уверен, что многие пользователи «LINQ» просто знают ** Как использовать это ** даже не замечая ** Как это реализовано **, изучение таких вещей, как это, приведет к замедлению **. Это похоже на то, что ** Когда вы изучаете WPF, вы всегда задаетесь вопросом, как это делает 3D Visual **. Конечно, это нужно заботиться о том, НО это ** продвинутая ** тема, а не для Ученика вообще. –

+0

Спасибо царю короля. Очень хороший совет, который я получил после долгого времени. Я из C++ фона, я начал C# несколько дней назад. не могли бы вы сказать мне, в каком направлении я должен продолжить. и я тоже хочу пойти на сертификацию microsoft. пожалуйста, помогите .thanks in adv. – Kenta

ответ

1

Группировка относится к операции ввода данных в группы, так что элементы в каждой группе имеют общий атрибут. GroupBy делит учащихся на группы - со средними 0-9, 10-19, 20-29, 30- 39 и т. Д. Вы должны посмотреть на http://msdn.microsoft.com/en-us//library/bb546139.aspx

ps

group student by (avg == 0 ? 0 : avg/10); 

кажется чрезмерным для меня. Вы можете изменить его проще

group student by (avg/10); 

ПФС: Я предпочитаю другой стиль LINQ, но это совершенно личный выбор. Другой стиль будет

var studentQuery = students.GroupBy(x => x.Scores.Average()/10); 
+0

Лучше идти за лямбдой. :) – Kenta