亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

LINQ 排序運(yùn)算符 OrderBy和OrderByDescending

排序運(yùn)算符以升序或降序排列集合的元素。LINQ包括以下排序運(yùn)算符。

運(yùn)算符描述
OrderBy

根據(jù)指定的字段按升序或降序?qū)现械脑剡M(jìn)行排序。

OrderByDescending

根據(jù)指定的字段按降序?qū)线M(jìn)行排序。僅在方法語(yǔ)法中有效。

ThenBy

僅在方法語(yǔ)法中有效。用于按升序進(jìn)行二次排序。

ThenByDescending

僅在方法語(yǔ)法中有效。用于按降序進(jìn)行二次排序。

Reverse

僅在方法語(yǔ)法中有效。按相反順序?qū)吓判颉?/p>

OrderBy

orderderby按升序或降序?qū)系闹颠M(jìn)行排序。默認(rèn)情況下,它按升序?qū)线M(jìn)行排序,因?yàn)閍scending關(guān)鍵字在這里是可選的。使用降序關(guān)鍵字對(duì)集合進(jìn)行降序排序。

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
    new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } 
};

var orderByResult = from s in studentList
                   orderby s.StudentName 
                   select s;

var orderByDescendingResult = from s in studentList
                   orderby s.StudentName descending
                   select s;
Dim orderByResult = From s In studentList
                   Order By s.StudentName  
                   Select s

Dim orderByDescendingResult = From s In studentList
                   Order By s.StudentName Descending
                   Select s

上例中的orderByResult在執(zhí)行后將包含以下元素:

Bill
John
Ram
Ron
Steve

上例中的orderByDescendingResult在執(zhí)行后將包含以下元素:

Steve
Ron
Ram
John
Bill

方法語(yǔ)法中的OrderBy

OrderBy擴(kuò)展方法有兩個(gè)重載。OrderBy擴(kuò)展方法的第一個(gè)重載接受Func委托類型參數(shù)。因此,您需要為要對(duì)集合進(jìn)行排序的字段傳遞lambda表達(dá)式。

OrderBy的第二個(gè)重載方法接受IComparer的對(duì)象以及Func委托類型,以使用自定義比較進(jìn)行排序。

OrderBy重載方法:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, 
            Func<TSource, TKey> keySelector);
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, 
            Func<TSource, TKey> keySelector, 
            IComparer<TKey> comparer);

以下示例使用OrderBy擴(kuò)展方法按StudentName的升序?qū)tudentList集合進(jìn)行排序。

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
    new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } 
};

var studentsInAscOrder = studentList.OrderBy(s => s.StudentName);
Dim studentsInAscOrder = studentList.OrderBy(Function(s) s.StudentName)
方法語(yǔ)法不允許decending關(guān)鍵字對(duì)集合進(jìn)行降序排序。使用OrderByDecending()方法。

OrderByDescending

OrderByDescending以降序?qū)线M(jìn)行排序。

OrderByDescending僅對(duì)方法語(yǔ)法有效。它在查詢語(yǔ)法中無(wú)效,因?yàn)椴樵冋Z(yǔ)法使用升序和降序?qū)傩?,如上所示?/p>

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
    new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } 
};

var studentsInDescOrder = studentList.OrderByDescending(s => s.StudentName);
Dim studentsInDescOrder = studentList.OrderByDescending(Function(s) s.StudentName)

上面示例中的結(jié)果在執(zhí)行后將包含以下元素。

Steve
Ron
Ram
John
Bill

請(qǐng)注意,查詢語(yǔ)法不支持OrderByDescending。請(qǐng)改用decending關(guān)鍵字。

多重排序

您可以在用逗號(hào)分隔的多個(gè)字段上對(duì)集合進(jìn)行排序。給定的集合將首先基于第一個(gè)字段進(jìn)行排序,然后如果兩個(gè)元素的第一個(gè)字段的值相同,則將使用第二個(gè)字段進(jìn)行排序,依此類推。

    示例:查詢語(yǔ)法C#中的多重排序

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
    new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 }, 
    new Student() { StudentID = 6, StudentName = "Ram" , Age = 18 }
};

var orderByResult = from s in studentList
                   orderby s.StudentName, s.Age 
                   select new { s.StudentName, s.Age };

在上面的示例中,studentList集合包括兩個(gè)相同的StudentName,Ram。因此,現(xiàn)在,studentList將首先基于StudentName進(jìn)行排序,然后根據(jù)年齡進(jìn)行升序排列。因此,執(zhí)行后orderByResult將包含以下元素

StudentName: Bill, Age: 25
StudentName: John, Age: 18
StudentName: Ram, Age: 18
StudentName: Ram, Age: 20
StudentName: Ron, Age: 19
StudentName: Steve, Age: 15
方法語(yǔ)法中的多重排序的工作方式不同。使用ThenBy或ThenByDecenting擴(kuò)展方法進(jìn)行二次排序。

要記住的要點(diǎn)

  1. LINQ包括五個(gè)排序運(yùn)算符:OrderBy,OrderByDescending,ThenBy,ThenByDescending和Reverse

  2. LINQ 查詢語(yǔ)法不支持 OrderByDescending,ThenBy,ThenByDescending 和 Reverse。它只支持“ Order By”子句的“ ascending”和“ descending”排序方向。

  3. LINQ查詢語(yǔ)法支持多個(gè)以逗號(hào)分隔的排序字段,而您必須使用ThenBy和ThenByDescending方法進(jìn)行二次排序。