<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 如何:對查詢結果進行分組(C# 編程指南) 分組是 LINQ 最強大的功能之一。下面的示例演示如何以各種方式對數據進行分組: * 按照單個屬性。 * 按照字符串屬性的首字母。 * 按照計算出的數值范圍。 * 按照布爾謂詞或其他表達式。 * 按照復合鍵。 此外,最后兩個查詢將它們的結果投影到一個新的匿名類型中,該類型僅包含學生的名字和姓氏。有關更多信息,請參見 [group 子句(C# 參考)](https://msdn.microsoft.com/zh-cn/library/bb384063.aspx)。 本主題中的所有示例都使用下列幫助器類和數據源。 ``` public class StudentClass { #region data protected enum GradeLevel { FirstYear = 1, SecondYear, ThirdYear, FourthYear }; protected class Student { public string FirstName { get; set; } public string LastName { get; set; } public int ID { get; set; } public GradeLevel Year; public List<int> ExamScores; } protected static List<Student> students = new List<Student> { new Student {FirstName = "Terry", LastName = "Adams", ID = 120, Year = GradeLevel.SecondYear, ExamScores = new List<int>{ 99, 82, 81, 79}}, new Student {FirstName = "Fadi", LastName = "Fakhouri", ID = 116, Year = GradeLevel.ThirdYear, ExamScores = new List<int>{ 99, 86, 90, 94}}, new Student {FirstName = "Hanying", LastName = "Feng", ID = 117, Year = GradeLevel.FirstYear, ExamScores = new List<int>{ 93, 92, 80, 87}}, new Student {FirstName = "Cesar", LastName = "Garcia", ID = 114, Year = GradeLevel.FourthYear, ExamScores = new List<int>{ 97, 89, 85, 82}}, new Student {FirstName = "Debra", LastName = "Garcia", ID = 115, Year = GradeLevel.ThirdYear, ExamScores = new List<int>{ 35, 72, 91, 70}}, new Student {FirstName = "Hugo", LastName = "Garcia", ID = 118, Year = GradeLevel.SecondYear, ExamScores = new List<int>{ 92, 90, 83, 78}}, new Student {FirstName = "Sven", LastName = "Mortensen", ID = 113, Year = GradeLevel.FirstYear, ExamScores = new List<int>{ 88, 94, 65, 91}}, new Student {FirstName = "Claire", LastName = "O'Donnell", ID = 112, Year = GradeLevel.FourthYear, ExamScores = new List<int>{ 75, 84, 91, 39}}, new Student {FirstName = "Svetlana", LastName = "Omelchenko", ID = 111, Year = GradeLevel.SecondYear, ExamScores = new List<int>{ 97, 92, 81, 60}}, new Student {FirstName = "Lance", LastName = "Tucker", ID = 119, Year = GradeLevel.ThirdYear, ExamScores = new List<int>{ 68, 79, 88, 92}}, new Student {FirstName = "Michael", LastName = "Tucker", ID = 122, Year = GradeLevel.FirstYear, ExamScores = new List<int>{ 94, 92, 91, 91}}, new Student {FirstName = "Eugene", LastName = "Zabokritski", ID = 121, Year = GradeLevel.FourthYear, ExamScores = new List<int>{ 96, 85, 91, 60}} }; #endregion //Helper method, used in GroupByRange. protected static int GetPercentile(Student s) { double avg = s.ExamScores.Average(); return avg > 0 ? (int)avg / 10 : 0; } public void QueryHighScores(int exam, int score) { var highScores = from student in students where student.ExamScores[exam] > score select new {Name = student.FirstName, Score = student.ExamScores[exam]}; foreach (var item in highScores) { Console.WriteLine("{0,-15}{1}", item.Name, item.Score); } } } public class Program { public static void Main() { StudentClass sc = new StudentClass(); sc.QueryHighScores(1, 90); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit"); Console.ReadKey(); } } ``` 下面的示例演示如何通過使用元素的單個屬性作為組鍵對源元素進行分組。在這種情況下,鍵是 **string**,即學生的姓氏。還可以使用子字符串作為鍵。分組操作將對該類型使用默認的相等比較器。 將下面的方法粘貼到 StudentClass 類中。將 Main 方法中的調用語句更改為 sc.GroupBySingleProperty()。 ``` public void GroupBySingleProperty() { Console.WriteLine("Group by a single property in an object:"); // Variable queryLastNames is an IEnumerable<IGrouping<string, // DataClass.Student>>. var queryLastNames = from student in students group student by student.LastName into newGroup orderby newGroup.Key select newGroup; foreach (var nameGroup in queryLastNames) { Console.WriteLine("Key: {0}", nameGroup.Key); foreach (var student in nameGroup) { Console.WriteLine("\t{0}, {1}", student.LastName, student.FirstName); } } } /* Output: Group by a single property in an object: Key: Adams Adams, Terry Key: Fakhouri Fakhouri, Fadi Key: Feng Feng, Hanying Key: Garcia Garcia, Cesar Garcia, Debra Garcia, Hugo Key: Mortensen Mortensen, Sven Key: O'Donnell O'Donnell, Claire Key: Omelchenko Omelchenko, Svetlana Key: Tucker Tucker, Lance Tucker, Michael Key: Zabokritski Zabokritski, Eugene */ ``` 下面的示例演示如何通過使用除對象屬性以外的某個項作為組鍵對源元素進行分組。在此示例中,鍵是學生姓氏的第一個字母。 將下面的方法粘貼到 StudentClass 類中。將 Main 方法中的調用語句更改為 sc.GroupBySubstring()。 ``` public void GroupBySubstring() { Console.WriteLine("\r\nGroup by something other than a property of the object:"); var queryFirstLetters = from student in students group student by student.LastName[0]; foreach (var studentGroup in queryFirstLetters) { Console.WriteLine("Key: {0}", studentGroup.Key); // Nested foreach is required to access group items. foreach (var student in studentGroup) { Console.WriteLine("\t{0}, {1}", student.LastName, student.FirstName); } } } /* Output: Group by something other than a property of the object: Key: A Adams, Terry Key: F Fakhouri, Fadi Feng, Hanying Key: G Garcia, Cesar Garcia, Debra Garcia, Hugo Key: M Mortensen, Sven Key: O O'Donnell, Claire Omelchenko, Svetlana Key: T Tucker, Lance Tucker, Michael Key: Z Zabokritski, Eugene */ ``` 下面的示例演示如何通過使用某個數值范圍作為組鍵對源元素進行分組。然后,查詢將結果投影到一個匿名類型中,該類型僅包含學生的名字和姓氏以及該學生所屬的百分點范圍。使用匿名類型的原因是沒有必要使用完整的 Student 對象來顯示結果。 GetPercentile 是一個 helper 函數,它根據學生的平均分數計算百分比。該方法返回 0 到 10 之間的整數。 ``` //Helper method, used in GroupByRange. protected static int GetPercentile(Student s) { double avg = s.ExamScores.Average(); return avg > 0 ? (int)avg / 10 : 0; } ``` 將下面的方法粘貼到 StudentClass 類中。將 Main 方法中的調用語句更改為 sc.GroupByRange()。 ``` public void GroupByRange() { Console.WriteLine("\r\nGroup by numeric range and project into a new anonymous type:"); var queryNumericRange = from student in students let percentile = GetPercentile(student) group new { student.FirstName, student.LastName } by percentile into percentGroup orderby percentGroup.Key select percentGroup; // Nested foreach required to iterate over groups and group items. foreach (var studentGroup in queryNumericRange) { Console.WriteLine("Key: {0}", (studentGroup.Key * 10)); foreach (var item in studentGroup) { Console.WriteLine("\t{0}, {1}", item.LastName, item.FirstName); } } } /* Output: Group by numeric range and project into a new anonymous type: Key: 60 Garcia, Debra Key: 70 O'Donnell, Claire Key: 80 Adams, Terry Feng, Hanying Garcia, Cesar Garcia, Hugo Mortensen, Sven Omelchenko, Svetlana Tucker, Lance Zabokritski, Eugene Key: 90 Fakhouri, Fadi Tucker, Michael */ ``` 下面的示例演示如何通過使用布爾比較表達式對源元素進行分組。在此示例中,布爾表達式會測試學生的平均考試分數是否超過 75。與上述示例一樣,結果被投影到一個匿名類型中,因為不需要完整的源元素。請注意,在執行查詢時,該匿名類型中的屬性將變成 Key 成員上的屬性,并且可以通過名稱進行訪問。 將下面的方法粘貼到 StudentClass 類中。將 Main 方法中的調用語句更改為 sc.GroupByBoolean()。 ``` public void GroupByBoolean() { Console.WriteLine("\r\nGroup by a Boolean into two groups with string keys"); Console.WriteLine("\"True\" and \"False\" and project into a new anonymous type:"); var queryGroupByAverages = from student in students group new { student.FirstName, student.LastName } by student.ExamScores.Average() > 75 into studentGroup select studentGroup; foreach (var studentGroup in queryGroupByAverages) { Console.WriteLine("Key: {0}", studentGroup.Key); foreach (var student in studentGroup) Console.WriteLine("\t{0} {1}", student.FirstName, student.LastName); } } /* Output: Group by a Boolean into two groups with string keys "True" and "False" and project into a new anonymous type: Key: True Terry Adams Fadi Fakhouri Hanying Feng Cesar Garcia Hugo Garcia Sven Mortensen Svetlana Omelchenko Lance Tucker Michael Tucker Eugene Zabokritski Key: False Debra Garcia Claire O'Donnell */ ``` 下面的示例演示如何使用匿名類型來封裝包含多個值的鍵。在此示例中,第一個鍵值是學生姓氏的第一個字母。第二個鍵值是一個布爾值,它指定該學生在第一次考試中的得分是否超過了 85。可以按照該鍵中的任何屬性對多組值進行排序。 將下面的方法粘貼到 StudentClass 類中。將 Main 方法中的調用語句更改為 sc.GroupByCompositeKey()。 ``` public void GroupByCompositeKey() { var queryHighScoreGroups = from student in students group student by new { FirstLetter = student.LastName[0], Score = student.ExamScores[0] > 85 } into studentGroup orderby studentGroup.Key.FirstLetter select studentGroup; Console.WriteLine("\r\nGroup and order by a compound key:"); foreach (var scoreGroup in queryHighScoreGroups) { string s = scoreGroup.Key.Score == true ? "more than" : "less than"; Console.WriteLine("Name starts with {0} who scored {1} 85", scoreGroup.Key.FirstLetter, s); foreach (var item in scoreGroup) { Console.WriteLine("\t{0} {1}", item.FirstName, item.LastName); } } } /* Output: Group and order by a compound key: Name starts with A who scored more than 85 Terry Adams Name starts with F who scored more than 85 Fadi Fakhouri Hanying Feng Name starts with G who scored more than 85 Cesar Garcia Hugo Garcia Name starts with G who scored less than 85 Debra Garcia Name starts with M who scored more than 85 Sven Mortensen Name starts with O who scored less than 85 Claire O'Donnell Name starts with O who scored more than 85 Svetlana Omelchenko Name starts with T who scored less than 85 Lance Tucker Name starts with T who scored more than 85 Michael Tucker Name starts with Z who scored more than 85 Eugene Zabokritski */ ``` ## 編譯代碼 將您想要測試的每種方法都復制并粘貼到 StudentClass 類中。將該方法的調用語句添加到 Main 方法中并按 F5。 在改寫這些方法以適合您自己的應用程序時,請記住 LINQ 需要 .NET Framework 3.5 或 4 版,并且項目必須包含一個對 System.Core.dll 的引用和一條針對 System.Linq 的 using 指令。LINQ to SQL、LINQ to XML 和 LINQ to DataSet 類型需要其他 using 指令和引用。有關更多信息,請參見 [How to: Create a LINQ Project](https://msdn.microsoft.com/zh-cn/library/bb546156.aspx)。 ## 請參閱 [GroupBy&lt;TSource, TKey&gt;](https://msdn.microsoft.com/zh-cn/library/bb534501.aspx) [IGrouping&lt;TKey, TElement&gt;](https://msdn.microsoft.com/zh-cn/library/bb344977.aspx) [LINQ 查詢表達式(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb397676.aspx) [group 子句(C# 參考)](https://msdn.microsoft.com/zh-cn/library/bb384063.aspx) [匿名類型(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb397696.aspx) [如何:對分組操作執行子查詢(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb311041.aspx) [如何:創建嵌套組(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb545974.aspx) [Grouping Data](https://msdn.microsoft.com/zh-cn/library/bb546139.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看