Linq select top 1 order by desc c

A sorting operator arranges the elements of the collection in ascending or descending order. LINQ includes following sorting operators.

Sorting Operator Description Sorts the elements in the collection based on specified fields in ascending or decending order. Sorts the collection based on specified fields in descending order. Only valid in method syntax. ThenBy Only valid in method syntax. Used for second level sorting in ascending order. ThenByDescending Only valid in method syntax. Used for second level sorting in descending order. Reverse Only valid in method syntax. Sorts the collection in reverse order.

OrderBy

OrderBy sorts the values of a collection in ascending or descending order. It sorts the collection in ascending order by default because ascending keyword is optional here. Use descending keyword to sort collection in descending order.

IList studentList = new List[] { 
    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 in the above example would contain following elements after execution:

Bill John Ram Ron Steve

orderByDescendingResult in the above example would contain following elements after execution:

Steve Ron Ram John Bill

OrderBy in Method Syntax

OrderBy extension method has two overloads. First overload of OrderBy extension method accepts the Func delegate type parameter. So you need to pass the lambda expression for the field based on which you want to sort the collection.

The second overload method of OrderBy accepts object of IComparer along with Func delegate type to use custom comparison for sorting.

public static IOrderedEnumerable OrderBy[this IEnumerable source,

        Func keySelector];
public static IOrderedEnumerable OrderBy[this IEnumerable source,
        Func keySelector, 
        IComparer comparer];
The following example sorts the studentList collection in ascending order of StudentName using OrderBy extension method.
IList studentList = new List[] { 
    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]

Method syntax does not allow the decending keyword to sorts the collection in decending order. Use OrderByDecending[] method for it.

OrderByDescending

OrderByDescending sorts the collection in descending order.

OrderByDescending is valid only with the Method syntax. It is not valid in query syntax because the query syntax uses ascending and descending attributes as shown above.

IList studentList = new List[] { 
    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]

A result in the above example would contain following elements after execution.

Steve Ron Ram John Bill

Please note that OrderByDescending is not supported in query syntax. Use the decending keyword instead.

Multiple Sorting

You can sort the collection on multiple fields seperated by comma. The given collection would be first sorted based on the first field and then if value of first field would be the same for two elements then it would use second field for sorting and so on.

IList studentList = new List[] { 
    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 };

In the above example, studentList collection includes two identical StudentNames, Ram. So now, studentList would be first sorted based on StudentName and then by Age in ascending order. So, orderByResult would contain following elements after execution

StudentName: Bill, Age: 25 StudentName: John, Age: 18 StudentName: Ram, Age: 18 StudentName: Ram, Age: 20 StudentName: Ron, Age: 19 StudentName: Steve, Age: 15

Multiple sorting in method syntax works differently. Use ThenBy or ThenByDecending extension methods for secondary sorting.

How do I select top 10 records in LINQ?

Introduction. In order to select top records from a list of entities with LINQ, we use the Take method..

Take. The Take method allows you to select a specified number of elements from a list. ... .

Examples. Simple usage. ... .

Namespace. To use the Take method, you have to include this namespace: using System.Linq;.

See also..

How to take first element in LINQ C#?

While the methods presented before like Where[] , Take[] and Skip[] return a new collection of elements, there are also LINQ methods that only return a single element: First[predicate] returns the first element in the collection that matches the predicate.

How do I get the highest value in a column in LINQ?

In LINQ, you can find the maximum element of the given sequence by using Max[] function. This method provides the maximum element of the given set of values. It does not support query syntax in C#, but it supports in VB.NET. It is available in both Enumerable and Queryable classes in C#.

How to select data in LINQ C#?

Select[] method The Select[] method invokes the provided selector delegate on each element of the source IEnumerable sequence, and returns a new result IEnumerable sequence containing the output of each invocation.

Chủ Đề