Delen via


Method-Based voorbeelden van querysyntaxis: Partitioneren (LINQ)

De voorbeelden in dit onderwerp laten zien hoe u de Skip, SkipWhile, Take en TakeWhile methoden gebruikt om een DataSet te bevragen met behulp van de syntaxis van de queryexpressie.

De FillDataSet methode die in deze voorbeelden wordt gebruikt, wordt opgegeven in Gegevens laden in een DataSet-.

In de voorbeelden in dit onderwerp worden de tabellen Contact, Adres, Product, SalesOrderHeader en SalesOrderDetail gebruikt in de voorbeelddatabase AdventureWorks.

In de voorbeelden in dit onderwerp worden de volgende using/Imports verklaringen gebruikt:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;
Option Explicit On

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

Voor meer informatie, zie Hoe te: Een LINQ naar DataSet-project maken in Visual Studio:.

Overslaan

Voorbeeld

In dit voorbeeld wordt de Skip-methode gebruikt om alle behalve de eerste vijf contactpersonen van de Contact-tabel op te halen.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable contacts = ds.Tables["Contact"];

IEnumerable<DataRow> allButFirst5Contacts = contacts.AsEnumerable().Skip(5);

Console.WriteLine("All but first 5 contacts:");
foreach (DataRow contact in allButFirst5Contacts)
{
    Console.WriteLine($"FirstName = {contact.Field<string>("FirstName")} \tLastname = {contact.Field<string>("Lastname")}");
}
' 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 allButFirst5Contacts = contacts.AsEnumerable().Skip(5)

Console.WriteLine("All but first 5 contacts:")

For Each contact In allButFirst5Contacts
    Console.Write("FirstName = {0} ", contact.Field(Of String)("FirstName"))
    Console.WriteLine(vbTab & " LastName = " & contact.Field(Of String)("LastName"))
Next

Voorbeeld

In dit voorbeeld wordt de Skip methode gebruikt om behalve de eerste twee alle adressen in Seattle op te halen.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable addresses = ds.Tables["Address"];
DataTable orders = ds.Tables["SalesOrderHeader"];

var query = (
    from address in addresses.AsEnumerable()
    from order in orders.AsEnumerable()
    where address.Field<int>("AddressID") == order.Field<int>("BillToAddressID")
         && address.Field<string>("City") == "Seattle"
    select new
    {
        City = address.Field<string>("City"),
        OrderID = order.Field<int>("SalesOrderID"),
        OrderDate = order.Field<DateTime>("OrderDate")
    }).Skip(2);

Console.WriteLine("All but first 2 orders in Seattle:");
foreach (var order in query)
{
    Console.WriteLine($"City: {order.City} Order ID: {order.OrderID} Total Due: {order.OrderDate:d}");
}
' 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 addresses As DataTable = ds.Tables("Address")
Dim orders As DataTable = ds.Tables("SalesOrderHeader")

Dim query = ( _
    From address In addresses.AsEnumerable() _
    From order In orders.AsEnumerable() _
    Where (address.Field(Of Integer)("AddressID") = _
           order.Field(Of Integer)("BillToAddressID")) _
         And address.Field(Of String)("City") = "Seattle" _
    Select New With _
       { _
           .City = address.Field(Of String)("City"), _
           .OrderID = order.Field(Of Integer)("SalesOrderID"), _
           .OrderDate = order.Field(Of DateTime)("OrderDate") _
       }).Skip(2)

Console.WriteLine("All but first 2 orders in Seattle:")
For Each addOrder In query
    Console.Write("City: " & addOrder.City)
    Console.Write(" Order ID: " & addOrder.OrderID)
    Console.WriteLine(" Order date: " & addOrder.OrderDate)
Next

In de tussentijd overslaan

Voorbeeld

In dit voorbeeld worden #D0 en #D1 methoden gebruikt om producten uit de #D2 tabel te retourneren met een catalogusprijs die groter is dan 300,00.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables["Product"];

IEnumerable<DataRow> skipWhilePriceLessThan300 =
    products.AsEnumerable()
        .OrderBy(listprice => listprice.Field<decimal>("ListPrice"))
        .SkipWhile(product => product.Field<decimal>("ListPrice") < 300.00M);

Console.WriteLine("Skip while ListPrice is less than 300.00:");
foreach (DataRow product in skipWhilePriceLessThan300)
{
    Console.WriteLine(product.Field<decimal>("ListPrice"));
}
' 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 skipWhilePriceLessThan300 As IEnumerable(Of DataRow) = _
    products.AsEnumerable() _
        .OrderBy(Function(listprice) listprice.Field(Of Decimal)("ListPrice")) _
        .SkipWhile(Function(product) product.Field(Of Decimal)("ListPrice") < 300D)

Console.WriteLine("First ListPrice less than 300.00:")
For Each product As DataRow In skipWhilePriceLessThan300
    Console.WriteLine(product.Field(Of Decimal)("ListPrice"))
Next

Nemen

Voorbeeld

In dit voorbeeld wordt de methode #D0 gebruikt om alleen de eerste vijf contactpersonen uit de #D1 tabel op te halen.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable contacts = ds.Tables["Contact"];

IEnumerable<DataRow> first5Contacts = contacts.AsEnumerable().Take(5);

Console.WriteLine("First 5 contacts:");
foreach (DataRow contact in first5Contacts)
{
    Console.WriteLine($"Title = {contact.Field<string>("Title")} \t FirstName = {contact.Field<string>("FirstName")} \t Lastname = {contact.Field<string>("Lastname")}");
}
' 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 first5Contacts = contacts.AsEnumerable().Take(5)

Console.WriteLine("First 5 contacts:")
For Each contact In first5Contacts
    Console.Write("Title = " & contact.Field(Of String)("Title"))
    Console.Write(vbTab & "FirstName = " & contact.Field(Of String)("FirstName"))
    Console.WriteLine(vbTab & "LastName = " & contact.Field(Of String)("LastName"))
Next

Voorbeeld

In dit voorbeeld wordt de #D0-methode gebruikt om de eerste drie adressen in Seattle op te halen.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable addresses = ds.Tables["Address"];
DataTable orders = ds.Tables["SalesOrderHeader"];

var query = (
    from address in addresses.AsEnumerable()
    from order in orders.AsEnumerable()
    where address.Field<int>("AddressID") == order.Field<int>("BillToAddressID")
         && address.Field<string>("City") == "Seattle"
    select new
    {
        City = address.Field<string>("City"),
        OrderID = order.Field<int>("SalesOrderID"),
        OrderDate = order.Field<DateTime>("OrderDate")
    }).Take(3);

Console.WriteLine("First 3 orders in Seattle:");
foreach (var order in query)
{
    Console.WriteLine($"City: {order.City} Order ID: {order.OrderID} Total Due: {order.OrderDate:d}");
}
' 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 addresses As DataTable = ds.Tables("Address")
Dim orders As DataTable = ds.Tables("SalesOrderHeader")

Dim query = ( _
    From address In addresses.AsEnumerable() _
    From order In orders.AsEnumerable() _
    Where (address.Field(Of Integer)("AddressID") = _
        order.Field(Of Integer)("BillToAddressID")) _
         And address.Field(Of String)("City") = "Seattle" _
    Select New With _
    { _
        .City = address.Field(Of String)("City"), _
        .OrderID = order.Field(Of Integer)("SalesOrderID"), _
        .OrderDate = order.Field(Of DateTime)("OrderDate") _
    }).Take(3)

Console.WriteLine("First 3 orders in Seattle:")
For Each order In query
    Console.Write("City: " & order.City)
    Console.Write(" Order ID: " & order.OrderID)
    Console.WriteLine(" Order date: " & order.OrderDate)
Next

In de tussentijd

Voorbeeld

In dit voorbeeld worden #D0 en #D1 gebruikt om producten uit de #D2 tabel te retourneren met een catalogusprijs kleiner dan 300,00.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables["Product"];

IEnumerable<DataRow> takeWhileListPriceLessThan300 =
    products.AsEnumerable()
        .OrderBy(listprice => listprice.Field<decimal>("ListPrice"))
        .TakeWhile(product => product.Field<decimal>("ListPrice") < 300.00M);

Console.WriteLine("First ListPrice less than 300:");
foreach (DataRow product in takeWhileListPriceLessThan300)
{
    Console.WriteLine(product.Field<decimal>("ListPrice"));
}
' 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 takeWhileListPriceLessThan300 As IEnumerable(Of DataRow) = _
    products.AsEnumerable() _
        .OrderBy(Function(listprice) listprice.Field(Of Decimal)("ListPrice")) _
        .TakeWhile(Function(product) product.Field(Of Decimal)("ListPrice") < 300D)

Console.WriteLine("First ListPrice less than 300.00:")
For Each product As DataRow In takeWhileListPriceLessThan300
    Console.WriteLine(product.Field(Of Decimal)("ListPrice"))
Next

Zie ook