Freigeben über


Beispiele für die methodenbasierte Abfragesyntax: Projektion (LINQ to Entities)

In diesem Beispiel wird gezeigt, wie Sie mithilfe der Select-Methode und der SelectMany-Methode unter Verwendung der methodenbasierten Abfragesyntax das AdventureWorks Sales-Modell abfragen. Für das in den Beispielen verwendete "AdventureWorks Sales"-Modell wurde auf die Tabellen Contact, Address, Product, SalesOrderHeader und SalesOrderDetail der "AdventureWorks"-Beispieldatenbank zurückgegriffen.

Die Beispiele in diesem Thema verwenden die folgenden using/Imports-Anweisungen:

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;

Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines LINQ to Entities-Projekts in Visual Studio.

Select

Beispiel

Im folgenden Beispiel wird die Select-Methode verwendet, um die Product.Name-Eigenschaft und die Product.ProductID-Eigenschaft auf eine Abfolge anonymer Typen zu projizieren.

Using AWEntities As New AdventureWorksEntities
    Dim query = AWEntities.Product _
    .Select(Function(prod) New With _
    { _
        .ProductName = prod.Name, _
        .ProductId = prod.ProductID _
    })

    Console.WriteLine("Product Info:")
    For Each productInfo In query
        Console.WriteLine("Product Id: {0} Product name: {1} ", _
                productInfo.ProductId, productInfo.ProductName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    var query = AWEntities.Product
        .Select(product => new
        {
            ProductId = product.ProductID,
            ProductName = product.Name
        });

    Console.WriteLine("Product Info:");
    foreach (var productInfo in query)
    {
        Console.WriteLine("Product Id: {0} Product name: {1} ",
            productInfo.ProductId, productInfo.ProductName);
    }
}

Beispiel

Im folgenden Beispiel wird die Select-Methode verwendet, um eine Sequenz zurückzugeben, die nur aus Produktnamen besteht.

Using AWEntities As New AdventureWorksEntities
    Dim productNames = AWEntities.Product _
    .Select(Function(p) p.Name())

    Console.WriteLine("Product Names:")
    For Each productName In productNames
        Console.WriteLine(productName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    IQueryable<string> productNames = AWEntities.Product
        .Select(p => p.Name);

    Console.WriteLine("Product Names:");
    foreach (String productName in productNames)
    {
        Console.WriteLine(productName);
    }
}

SelectMany

Beispiel

Im folgenden Beispiel wird die SelectMany-Methode verwendet, um alle Aufträge auszuwählen, bei denen TotalDue kleiner als 500,00 ist.

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

    Dim query = contacts.SelectMany( _
        Function(contact) orders.Where(Function(order) _
            (contact.ContactID = order.Contact.ContactID) _
                    And order.TotalDue < 500D) _
            .Select(Function(order) New With _
            { _
                .ContactID = contact.ContactID, _
                .LastName = contact.LastName, _
                .FirstName = contact.FirstName, _
                .OrderID = order.SalesOrderID, _
                .Total = order.TotalDue _
            }) _
    )

    For Each smallOrder In query
        Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Total Due: ${4} ", _
            smallOrder.ContactID, smallOrder.LastName, smallOrder.FirstName, _
            smallOrder.OrderID, smallOrder.Total)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Contact> contacts = AWEntities.Contact;
    ObjectQuery<SalesOrderHeader> orders = AWEntities.SalesOrderHeader;

    var query =
    contacts.SelectMany(
        contact => orders.Where(order =>
            (contact.ContactID == order.Contact.ContactID)
                && order.TotalDue < 500.00M)
            .Select(order => new
            {
                ContactID = contact.ContactID,
                LastName = contact.LastName,
                FirstName = contact.FirstName,
                OrderID = order.SalesOrderID,
                Total = order.TotalDue
            }));

    foreach (var smallOrder in query)
    {
        Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Total Due: ${4} ",
            smallOrder.ContactID, smallOrder.LastName, smallOrder.FirstName,
            smallOrder.OrderID, smallOrder.Total);
    }
}

Beispiel

Im folgenden Beispiel wird die SelectMany-Methode verwendet, um alle Aufträge auszuwählen, die am 1. Oktober 2002 oder später eingegangen sind.

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

    Dim query = contacts.SelectMany( _
        Function(contact) orders.Where(Function(order) _
            (contact.ContactID = order.Contact.ContactID) _
                    And order.OrderDate >= New DateTime(2002, 10, 1)) _
            .Select(Function(order) New With _
            { _
                .ContactID = contact.ContactID, _
                .LastName = contact.LastName, _
                .FirstName = contact.FirstName, _
                .OrderID = order.SalesOrderID, _
                .OrderDate = order.OrderDate _
            }) _
    )

    For Each order In query
        Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Order date: {4:d} ", _
            order.ContactID, order.LastName, order.FirstName, _
            order.OrderID, order.OrderDate)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Contact> contacts = AWEntities.Contact;
    ObjectQuery<SalesOrderHeader> orders = AWEntities.SalesOrderHeader;

    var query =
    contacts.SelectMany(
        contact => orders.Where(order =>
            (contact.ContactID == order.Contact.ContactID)
                && order.OrderDate >= new DateTime(2002, 10, 1))
            .Select(order => new
            {
                ContactID = contact.ContactID,
                LastName = contact.LastName,
                FirstName = contact.FirstName,
                OrderID = order.SalesOrderID,
                OrderDate = order.OrderDate
            }));

    foreach (var order in query)
    {
        Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Order date: {4:d} ",
            order.ContactID, order.LastName, order.FirstName,
            order.OrderID, order.OrderDate);
    }
}

Siehe auch

Konzepte

Beispiele für die methodenbasierte Abfragesyntax (LINQ to Entities)