쿼리 식 구문 예제: 정렬(LINQ to DataSet)
업데이트: November 2007
이 항목의 예제에서는 OrderBy, OrderByDescending, Reverse<TSource> 및 ThenByDescending 메서드에서 쿼리 식 구문을 사용하여 DataSet을 쿼리하고 결과를 정렬하는 방법을 보여 줍니다.
이러한 예제에 사용된 FillDataSet 메서드에 대한 자세한 내용은 DataSet에 데이터 로드를 참조하십시오.
이 항목의 예제에서는 AdventureWorks 샘플 데이터베이스의 Contact, Address, Product, SalesOrderHeader 및 SalesOrderDetail 테이블을 사용합니다.
이 항목의 예제에서는 다음과 같은 using/Imports 문을 사용합니다.
Option Explicit On
Imports System
Imports System.Linq
Imports System.Linq.Expressions
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Common
Imports System.Globalization
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
using System.Globalization;
자세한 내용은 방법: Visual Studio에서 LINQ to DataSet 프로젝트 만들기를 참조하십시오.
OrderBy
예제
이 예제에서는 OrderBy를 사용하여 성을 기준으로 정렬된 연락처 목록을 반환합니다.
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)
Dim contacts As DataTable = ds.Tables("Contact")
Dim query = _
From contact In contacts.AsEnumerable() _
Select contact _
Order By contact.Field(Of String)("LastName")
Console.WriteLine("The sorted list of last names:")
For Each contact In query
Console.WriteLine(contact.Field(Of String)("LastName"))
Next
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable contacts = ds.Tables["Contact"];
IEnumerable<DataRow> query =
from contact in contacts.AsEnumerable()
orderby contact.Field<string>("LastName")
select contact;
Console.WriteLine("The sorted list of last names:");
foreach (DataRow contact in query)
{
Console.WriteLine(contact.Field<string>("LastName"));
}
예제
이 예제에서는 OrderBy를 사용하여 성의 길이를 기준으로 연락처 목록을 정렬합니다.
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)
Dim contacts As DataTable = ds.Tables("Contact")
Dim query = _
From contact In contacts.AsEnumerable() _
Select contact _
Order By contact.Field(Of String)("LastName").Length
Console.WriteLine("The sorted list of last names (by length):")
For Each contact In query
Console.WriteLine(contact.Field(Of String)("LastName"))
Next
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable contacts = ds.Tables["Contact"];
IEnumerable<DataRow> query =
from contact in contacts.AsEnumerable()
orderby contact.Field<string>("LastName").Length
select contact;
Console.WriteLine("The sorted list of last names (by length):");
foreach (DataRow contact in query)
{
Console.WriteLine(contact.Field<string>("LastName"));
}
OrderByDescending
예제
이 예제에서는 OrderByDescending 메서드와 같은 orderby… descending(Order By … Descending)을 사용하여 가격 목록을 내림차순으로 정렬합니다.
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)
Dim products As DataTable = ds.Tables("Product")
Dim query = _
From product In products.AsEnumerable() _
Select product _
Order By product.Field(Of Decimal)("ListPrice") Descending
Console.WriteLine("The list price From highest to lowest:")
For Each product In query
Console.WriteLine(product.Field(Of Decimal)("ListPrice"))
Next
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable products = ds.Tables["Product"];
IEnumerable<Decimal> query =
from product in products.AsEnumerable()
orderby product.Field<Decimal>("ListPrice") descending
select product.Field<Decimal>("ListPrice");
Console.WriteLine("The list price from highest to lowest:");
foreach (Decimal product in query)
{
Console.WriteLine(product);
}
Reverse
예제
이 예제에서는 Reverse<TSource>을 사용하여 OrderDate가 2002년 2월 20일 이전인 주문 목록을 만듭니다.
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)
Dim orders As DataTable = ds.Tables("SalesOrderHeader")
Dim query = ( _
From order In orders.AsEnumerable() _
Where order.Field(Of DateTime)("OrderDate") < New DateTime(2002, 2, 20) _
Select order).Reverse()
Console.WriteLine("A backwards list of orders where OrderDate < Feb 20, 2002")
For Each order In query
Console.WriteLine(order.Field(Of DateTime)("OrderDate"))
Next
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable orders = ds.Tables["SalesOrderHeader"];
IEnumerable<DataRow> query = (
from order in orders.AsEnumerable()
where order.Field<DateTime>("OrderDate") < new DateTime(2002, 02, 20)
select order).Reverse();
Console.WriteLine("A backwards list of orders where OrderDate < Feb 20, 2002");
foreach (DataRow order in query)
{
Console.WriteLine(order.Field<DateTime>("OrderDate"));
}
ThenByDescending
예제
이 예제에서는 ThenByDescending 메서드와 같은 OrderBy… Descending을 사용하여 이름과 가격별 내림차순으로 제품 목록을 정렬합니다.
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)
Dim products As DataTable = ds.Tables("Product")
Dim query = _
From product In products.AsEnumerable() _
Order By product.Field(Of String)("Name"), _
product.Field(Of Decimal)("ListPrice") Descending _
Select product
For Each product In query
Console.Write("Product ID: " & product.Field(Of Integer)("ProductID"))
Console.Write(" Product Name: " & product.Field(Of String)("Name"))
Console.WriteLine(" List Price: " & product.Field(Of Decimal)("ListPrice"))
Next
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable products = ds.Tables["Product"];
IEnumerable<DataRow> query =
from product in products.AsEnumerable()
orderby product.Field<string>("Name"),
product.Field<Decimal>("ListPrice") descending
select product;
foreach (DataRow product in query)
{
Console.WriteLine("Product ID: {0} Product Name: {1} List Price {2}",
product.Field<int>("ProductID"),
product.Field<string>("Name"),
product.Field<Decimal>("ListPrice"));
}