다음을 통해 공유


방법: 시퀀스의 요소 정렬(LINQ to SQL)

업데이트: November 2007

OrderBy 연산자를 사용하여 하나 이상의 키에 따른 시퀀스를 정렬합니다.

참고:

LINQ to SQL에서는 string, int 등과 같이 간단한 기본 형식에 따라 순서를 지원하도록 디자인되었습니다. 익명 형식과 같이 복잡한 다중값 클래스에 대한 순서는 지원되지 않습니다. 또한 byte 데이터 형식을 지원하지 않습니다.

예제

다음 예제에서는 고용 날짜 기준으로 Employees를 정렬합니다.

Dim hireQuery = _
    From emp In db.Employees _
    Select emp _
    Order By emp.HireDate

For Each empObj As Employee In hireQuery
    Console.WriteLine("EmpID = {0}, Date Hired = {1}", _
        empObj.EmployeeID, empObj.HireDate)
Next
IOrderedQueryable<Employee> hireQuery =
    from emp in db.Employees
    orderby emp.HireDate
    select emp;

foreach (Employee empObj in hireQuery)
{
    Console.WriteLine("EmpID = {0}, Date Hired = {1}",
        empObj.EmployeeID, empObj.HireDate);
}

다음 예제에서는 where를 사용하여 화물편으로 London에 보낸 Orders를 정렬합니다.

Dim freightQuery = _
    From ord In db.Orders _
    Where ord.ShipCity = "London" _
    Select ord _
    Order By ord.Freight

For Each ordObj In freightQuery
    Console.WriteLine("Order ID = {0}, Freight = {1}", _
        ordObj.OrderID, ordObj.Freight)
Next
IOrderedQueryable<Order> freightQuery =
    from ord in db.Orders
    where ord.ShipCity == "London"
    orderby ord.Freight
    select ord;

foreach (Order ordObj in freightQuery)
{
    Console.WriteLine("Order ID = {0}, Freight = {1}",
        ordObj.OrderID, ordObj.Freight);
}

다음 예제에서는 단가가 최상위에서 최하위 순으로 Products를 정렬합니다.

Dim priceQuery = _
    From prod In db.Products _
    Select prod _
    Order By prod.UnitPrice Descending

For Each prodObj In priceQuery
    Console.WriteLine("Product ID = {0}, Unit Price = {1}", _
       prodObj.ProductID, prodObj.UnitPrice)
Next
IOrderedQueryable<Product> priceQuery =
    from prod in db.Products
    orderby prod.UnitPrice descending
    select prod;

foreach (Product prodObj in priceQuery)
{
    Console.WriteLine("Product ID = {0}, Unit Price = {1}",
        prodObj.ProductID, prodObj.UnitPrice);
}

다음 예제에서는 복합 OrderBy를 사용하여 Customers를 도시별로 정렬한 다음 연락처 이름으로 정렬합니다.

Dim custQuery = _
    From cust In db.Customers _
    Select cust _
    Order By cust.City, cust.ContactName

For Each custObj In custQuery
    Console.WriteLine("City = {0}, Name = {1}", custObj.City, _
        custObj.ContactName)
Next
IOrderedQueryable<Customer> custQuery =
    from cust in db.Customers
    orderby cust.City, cust.ContactName
    select cust;

foreach (Customer custObj in custQuery)
{
    Console.WriteLine("City = {0}, Name = {1}", custObj.City,
        custObj.ContactName);
}

다음 예제에서는 발송된 나라별로 EmployeeID 1에서 주문을 정렬한 다음 운임료를 최상위에서 최하위 기준으로 정렬합니다.

Dim ordQuery = _
    From ord In db.Orders _
    Where CInt(ord.EmployeeID.Value) = 1 _
    Select ord _
    Order By ord.ShipCountry, ord.Freight Descending

For Each ordObj In ordQuery
    Console.WriteLine("Country = {0}, Freight = {1}", _
        ordObj.ShipCountry, ordObj.Freight)
Next
IOrderedQueryable<Order> ordQuery =
    from ord in db.Orders
    where ord.EmployeeID == 1
    orderby ord.ShipCountry, ord.Freight descending
    select ord;

foreach (Order ordObj in ordQuery)
{
    Console.WriteLine("Country = {0}, Freight = {1}",
        ordObj.ShipCountry, ordObj.Freight);
}

다음 예제에서는 OrderBy, MaxGroupBy 연산자를 조합하여 범주별로 최고 단가인 Products를 찾은 다음 범주 ID로 그룹을 정렬합니다.

Dim highPriceQuery = From prod In db.Products _
    Group prod By prod.CategoryID Into grouping = Group _
    Order By CategoryID _
    Select CategoryID, _
    MostExpensiveProducts = _
        From prod2 In grouping _
        Where prod2.UnitPrice = _
        grouping.Max(Function(p3) p3.UnitPrice)

For Each prodObj In highPriceQuery
    Console.WriteLine(prodObj.CategoryID)
    For Each listing In prodObj.MostExpensiveProducts
        Console.WriteLine(listing.ProductName)
    Next
Next
var highPriceQuery =
    from prod in db.Products
    group prod by prod.CategoryID into grouping
    orderby grouping.Key
    select new
    {
        grouping.Key,
        MostExpensiveProducts =
            from prod2 in grouping
            where prod2.UnitPrice == grouping.Max(p3 => p3.UnitPrice)
            select prod2
    };

foreach (var prodObj in highPriceQuery)
{
    Console.WriteLine(prodObj.Key);
    foreach (var listing in prodObj.MostExpensiveProducts)
    {
        Console.WriteLine(listing.ProductName);
    }
}

Northwind 샘플 데이터베이스에 대한 이전 쿼리를 실행할 경우 결과는 다음과 비슷합니다.

1

Côte de Blaye

2

Vegie-spread

3

Sir Rodney's Marmalade

4

Raclette Courdavault

5

Gnocchi di nonna Alice

6

Thüringer Rostbratwurst

7

Manjimup Dried Apples

8

Carnarvon Tigers

참고 항목

개념

샘플 데이터베이스 다운로드(LINQ to SQL)

기타 리소스

쿼리 예제(LINQ to SQL)