Freigeben über


Vorgehensweise: Formulieren von Projektionen (LINQ to SQL)

Das folgende Beispiel zeigt, wie die select-Anweisung in C# und die Select-Anweisung in Visual Basic mit anderen Funktionen kombiniert werden können, um Abfrageprojektionen zu bilden.

Beispiel

Die folgenden Beispiele verwenden die Select-Klausel in Visual Basic (select-Klausel in C#), um eine Sequenz mit Kontaktnamen für Customers zurückzugeben.

Dim nameQuery = From cust In db.Customers _
    Select cust.ContactName
var nameQuery =
    from cust in db.Customers
    select cust.ContactName;

Das folgende Beispiel verwendet die Select-Klausel in Visual Basic (select-Klausel in C#) und anonyme Typen, um eine Sequenz von Kontaktnamen und Telefonnummern für Customers zurückzugeben.

Dim infoQuery = From cust In db.Customers _
    Select cust.ContactName, cust.Phone
var infoQuery =
    from cust in db.Customers
    select new { cust.ContactName, cust.Phone };

Das folgende Beispiel verwendet die Select-Klausel in Visual Basic (select-Klausel in C#) und anonyme Typen, um eine Sequenz mit Namen und Telefonnummern für Mitarbeiter zurückzugeben. Das FirstName-Feld und das LastName-Feld werden zu einem Feld (Name) kombiniert, und das HomePhone-Feld wird in der resultierenden Sequenz in Phone umbenannt.

Dim info2Query = From emp In db.Employees _
    Select Name = emp.FirstName & " " & emp.LastName, _
Phone = emp.HomePhone
var info2Query =
    from emp in db.Employees
    select new
    {
        Name = emp.FirstName + " " + emp.LastName,
        Phone = emp.HomePhone
    };

Das folgende Beispiel verwendet die Select-Klausel in Visual Basic (select-Klausel in C#) und anonyme Typen, um eine Sequenz aller ProductIDs und einen berechneten Wert namens HalfPrice zurückzugeben. Dieser Wert wird auf den UnitPrice, geteilt durch 2, festgelegt.

Dim specialQuery = From prod In db.Products _
    Select prod.ProductID, HalfPrice = CDec(prod.UnitPrice) / 2
var specialQuery =
    from prod in db.Products
    select new { prod.ProductID, HalfPrice = prod.UnitPrice / 2 };

Das folgende Beispiel verwendet die Select-Klausel in Visual Basic (select-Klausel in C#) und eine Bedingungsanweisung, um eine Sequenz mit Produktnamen und Produktverfügbarkeit zurückzugeben.

Dim prodQuery = From prod In db.Products _
Select prod.ProductName, Availability = _
    If(prod.UnitsInStock - prod.UnitsOnOrder < 0, _
    "Out Of Stock", "In Stock")
var prodQuery =
    from prod in db.Products
    select new
    {
        prod.ProductName,
        Availability =
            prod.UnitsInStock - prod.UnitsOnOrder < 0
        ? "Out Of Stock" : "In Stock"
    };

Das folgende Beispiel verwendet die Visual Basic Select-Klausel (select-Klausel in C#) und einen bekannten Typ (Name), um eine Sequenz mit den Namen der Mitarbeiter zurückzugeben.

Public Class Name
    Public FirstName As String
    Public LastName As String
End Class

Dim db As New Northwnd("c:\northwnd.mdf")
Dim empQuery = From emp In db.Employees _
    Select New Name With {.FirstName = emp.FirstName, .LastName = _
        emp.LastName}
public class Name
{
    public string FirstName = "";
    public string LastName = "";
}

 void empMethod()
 {
 Northwnd db = new Northwnd(@"c:\northwnd.mdf");
 var empQuery =
     from emp in db.Employees
     select new Name
     {
         FirstName = emp.FirstName,
         LastName = emp.LastName
     };
}

Das folgende Beispiel verwendet Select und Where in Visual Basic (select und where in C#), um eine gefilterte Sequenz mit Kontaktnamen von Kunden in London zurückzugeben.

Dim contactQuery = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust.ContactName
var contactQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust.ContactName;

Das folgende Beispiel verwendet die Select-Klausel in Visual Basic (select-Klausel in C#) und anonyme Typen, um eine geformte Teilmenge der Daten über Kunden zurückzugeben.

Dim custQuery = From cust In db.Customers _
    Select cust.CustomerID, CompanyInfo = New With {cust.CompanyName, _
        cust.City, cust.Country}, ContactInfo = _
        New With {cust.ContactName, cust.ContactTitle}
var custQuery =
    from cust in db.Customers
    select new
    {
        cust.CustomerID,
        CompanyInfo = new { cust.CompanyName, cust.City, cust.Country },
        ContactInfo = new { cust.ContactName, cust.ContactTitle }
    };

Im folgenden Beispiel werden geschachtelte Abfragen verwendet, um die folgenden Ergebnisse zurückzugeben:

  • Eine Sequenz aller Bestellungen und der entsprechenden OrderIDs.

  • Eine Untersequenz der Elemente in der Bestellung, für die es einen Rabatt gibt.

  • Der gesparte Betrag, wenn die Lieferkosten nicht eingeschlossen werden.

Dim ordQuery = From ord In db.Orders _
    Select ord.OrderID, DiscountedProducts = _
    (From od In ord.OrderDetails _
        Where od.Discount > 0.0 _
    Select od), _
FreeShippingDiscount = ord.Freight
var ordQuery =
    from ord in db.Orders
    select new
    {
        ord.OrderID,
        DiscountedProducts =
            from od in ord.OrderDetails
            where od.Discount > 0.0
            select od,
        FreeShippingDiscount = ord.Freight
    };

Siehe auch

Weitere Ressourcen

Beispiele für Abfragen (LINQ to SQL)