クエリ式の構文例 : 並べ替え (LINQ to Entities)

このトピックでは、クエリ式の構文で、OrderBy メソッドおよび OrderByDescending メソッドを使用して、AdventureWorks Sales Model を照会する例を取り上げます。これらの例で使用されている、AdventureWorks Sales Model は、AdventureWorks サンプル データベースの Contact、Address、Product、SalesOrderHeader、SalesOrderDetail の各テーブルから作成されています。

このトピックの例には、次の using/Imports ステートメントが使用されています。

Option Explicit On
Option Strict On
Imports L2EExamplesVB.AdventureWorksModel
Imports System.Data.Objects
Imports System.Globalization
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using AdventureWorksModel;
using System.Globalization;

詳細については、「Visual Studio で LINQ to Entities プロジェクトを作成する方法」を参照してください。

OrderBy

次の例では、OrderBy を使用して、姓の順に並べ替えられた連絡先の一覧を返します。

Using AWEntities As New AdventureWorksEntities
    Dim contacts As ObjectQuery(Of Contact) = AWEntities.Contact

    Dim sortedContacts = _
        From contact In contacts _
        Order By contact.LastName _
        Select contact

    Console.WriteLine("The sorted list of last names:")
    For Each n As Contact In sortedContacts
        Console.WriteLine(n.LastName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Contact> contacts = AWEntities.Contact;

    IQueryable<Contact> sortedNames =
        from n in contacts
        orderby n.LastName
        select n;

    Console.WriteLine("The sorted list of last names:");
    foreach (Contact n in sortedNames)
    {
        Console.WriteLine(n.LastName);
    }
}

次の例では、OrderBy を使用して、連絡先の一覧を姓の長さの順に並べ替えます。

Using AWEntities As New AdventureWorksEntities
    Dim contacts As ObjectQuery(Of Contact) = AWEntities.Contact

    Dim sortedNames = _
        From n In contacts _
        Order By n.LastName.Length _
        Select n

    Console.WriteLine("The sorted list of last names (by length):")
    For Each n As Contact In sortedNames
        Console.WriteLine(n.LastName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Contact> contacts = AWEntities.Contact;

    IQueryable<Contact> sortedNames =
        from n in contacts
        orderby n.LastName.Length
        select n;

    Console.WriteLine("The sorted list of last names (by length):");
    foreach (Contact n in sortedNames)
    {
        Console.WriteLine(n.LastName);
    }
}

OrderByDescending

次の例では、OrderByDescending メソッドと同等の orderby… descending (Visual Basic の場合は Order By … Descending) を使用して、価格の一覧を高いものから低い順に並べ替えます。

Using AWEntities As New AdventureWorksEntities
    Dim products As ObjectQuery(Of Product) = AWEntities.Product

    Dim sortedPrices = _
        From product In products _
        Order By product.ListPrice Descending _
        Select product.ListPrice

    Console.WriteLine("The list price from highest to lowest:")
    For Each price As Decimal In sortedPrices
        Console.WriteLine(price)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Product> products = AWEntities.Product;

    IQueryable<Decimal> sortedPrices =
        from p in products
        orderby p.ListPrice descending
        select p.ListPrice;

    Console.WriteLine("The list price from highest to lowest:");
    foreach (Decimal price in sortedPrices)
    {
        Console.WriteLine(price);
    }
}

ThenBy

次の例では、OrderByThenBy を使用して、姓の順、次に名の順に並べ替えられた連絡先の一覧を返します。

Using AWEntities As New AdventureWorksEntities
    Dim contacts As ObjectQuery(Of Contact) = AWEntities.Contact

    Dim sortedContacts = _
        From contact In contacts _
        Order By contact.LastName, contact.FirstName _
        Select contact

    Console.WriteLine("The list of contacts sorted by last name then by first name:")
    For Each sortedContact As Contact In sortedContacts
        Console.WriteLine(sortedContact.LastName + ", " + sortedContact.FirstName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Contact> contacts = AWEntities.Contact;

    IQueryable<Contact> sortedContacts =
        from contact in contacts
        orderby contact.LastName, contact.FirstName
        select contact;

    Console.WriteLine("The list of contacts sorted by last name then by first name:");
    foreach (Contact sortedContact in sortedContacts)
    {
        Console.WriteLine(sortedContact.LastName + ", " + sortedContact.FirstName);
    }
}

ThenByDescending

次の例では、ThenByDescending メソッドと同等の OrderBy… Descending を使用して、製品の一覧を、名前順に、次に表示価格の高いものから低い順に並べ替えます。

Using AWEntities As New AdventureWorksEntities
    Dim products As ObjectQuery(Of Product) = AWEntities.Product

    Dim query As IQueryable(Of Product) = _
        From product In products _
        Order By product.Name, product.ListPrice Descending _
        Select product

    For Each prod As Product In query
        Console.WriteLine("Product ID: {0} Product Name: {1} List Price {2}", _
            prod.ProductID, _
            prod.Name, _
            prod.ListPrice)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Product> products = AWEntities.Product;

    IQueryable<Product> query =
        from product in products
        orderby product.Name, product.ListPrice descending
        select product;

    foreach (Product product in query)
    {
        Console.WriteLine("Product ID: {0} Product Name: {1} List Price {2}",
            product.ProductID,
            product.Name,
            product.ListPrice);
    }
}

参照

概念

クエリ式の構文例 (LINQ to Entities)