基于方法的查询语法示例:分区 (LINQ to Entities)

本主题中的示例演示如何使用 SkipTake 方法以通过使用查询表达式语法来查询 AdventureWorks 销售模型。这些示例中使用的 AdventureWorks 销售模型从 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 项目

Skip

示例

以下示例使用 Skip 方法以获取 Contact 表中除前五个联系人之外的所有联系人。

Using AWEntities As New AdventureWorksEntities
    'LINQ to Entities only supports Skip on ordered collections.
    Dim products As IOrderedQueryable(Of Product) = _
            AWEntities.Product.OrderBy(Function(p) p.ListPrice)

    Dim allButFirst3Products As IQueryable(Of Product) = products.Skip(3)

    Console.WriteLine("All but first 3 products:")
    For Each product As Product In allButFirst3Products
        Console.WriteLine("Name: {0} \t ID: {1}", _
                product.Name, _
                product.ProductID)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    // LINQ to Entities only supports Skip on ordered collections.
    IOrderedQueryable<Product> products = AWEntities.Product
            .OrderBy(p => p.ListPrice);

    IQueryable<Product> allButFirst3Products = products.Skip(3);

    Console.WriteLine("All but first 3 products:");
    foreach (Product product in allButFirst3Products)
    {
        Console.WriteLine("Name: {0} \t ID: {1}",
            product.Name,
            product.ProductID);
    }
}

示例

以下示例使用 Skip 方法以获取 Seattle 的前两个地址之外的所有地址。

Using AWEntities As New AdventureWorksEntities
    Dim orders As ObjectQuery(Of SalesOrderHeader) = AWEntities.SalesOrderHeader
    Dim addresses As ObjectQuery(Of Address) = AWEntities.Address

    'LINQ to Entities only supports Skip on ordered collections.
    Dim query = ( _
        From address In addresses _
        From order In orders _
        Where address.AddressID = order.Address.AddressID _
                 And address.City = "Seattle" _
        Order By order.SalesOrderID _
        Select New With _
        { _
            .City = address.City, _
            .OrderID = order.SalesOrderID, _
            .OrderDate = order.OrderDate _
        }).Skip(2)

    Console.WriteLine("All but first 2 orders in Seattle:")
    For Each order In query
        Console.WriteLine("City: {0} Order ID: {1} Total Due: {2:d}", _
            order.City, order.OrderID, order.OrderDate)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Address> addresses = AWEntities.Address;
    ObjectQuery<SalesOrderHeader> orders = AWEntities.SalesOrderHeader;

    //LINQ to Entities only supports Skip on ordered collections.
    var query = (
        from address in addresses
        from order in orders
        where address.AddressID == order.Address.AddressID
             && address.City == "Seattle"
        orderby order.SalesOrderID
        select new
        {
            City = address.City,
            OrderID = order.SalesOrderID,
            OrderDate = order.OrderDate
        }).Skip(2);

    Console.WriteLine("All but first 2 orders in Seattle:");
    foreach (var order in query)
    {
        Console.WriteLine("City: {0} Order ID: {1} Total Due: {2:d}",
            order.City, order.OrderID, order.OrderDate);
    }

Take

示例

以下示例使用 Take 方法以只从 Contact 表中获取前五个联系人。

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

    Dim first5Contacts As IQueryable(Of Contact) = contacts.Take(5)

    Console.WriteLine("First 5 contacts:")
    For Each contact As Contact In first5Contacts
        Console.WriteLine("Title = {0} " & vbTab & " FirstName = {1} " _
            & vbTab & " Lastname = {2}", contact.Title, contact.FirstName, _
            contact.LastName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Contact> contacts = AWEntities.Contact;

    IQueryable<Contact> first5Contacts = contacts.Take(5);

    Console.WriteLine("First 5 contacts:");
    foreach (Contact contact in first5Contacts)
    {
        Console.WriteLine("Title = {0} \t FirstName = {1} \t Lastname = {2}",
            contact.Title,
            contact.FirstName,
            contact.LastName);
    }
}

示例

以下示例使用 Take 方法以获取 Seattle 的前三个地址。

Using AWEntities As New AdventureWorksEntities
    Dim orders As ObjectQuery(Of SalesOrderHeader) = AWEntities.SalesOrderHeader
    Dim addresses As ObjectQuery(Of Address) = AWEntities.Address

    Dim query = ( _
        From address In addresses _
        From order In orders _
        Where address.AddressID = order.Address.AddressID _
                 And address.City = "Seattle" _
        Select New With _
        { _
            .City = address.City, _
            .OrderID = order.SalesOrderID, _
            .OrderDate = order.OrderDate _
        }).Take(3)

    Console.WriteLine("First 3 orders in Seattle:")
    For Each order In query
        Console.WriteLine("City: {0} Order ID: {1} Total Due: {2:d}", _
            order.City, order.OrderID, order.OrderDate)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Address> addresses = AWEntities.Address;
    ObjectQuery<SalesOrderHeader> orders = AWEntities.SalesOrderHeader;

    var query = (
        from address in addresses
        from order in orders
        where address.AddressID == order.Address.AddressID
             && address.City == "Seattle"
        select new
        {
            City = address.City,
            OrderID = order.SalesOrderID,
            OrderDate = order.OrderDate
        }).Take(3);
    Console.WriteLine("First 3 orders in Seattle:");
    foreach (var order in query)
    {
        Console.WriteLine("City: {0} Order ID: {1} Total Due: {2:d}",
            order.City, order.OrderID, order.OrderDate);
    }
}

另请参见

概念

基于方法的查询语法示例 (LINQ to Entities)