Formulieren von Projektionen
Das folgende Beispiel zeigt, wie Sie die select
-Anweisung in C# und die Select
-Anweisung in Visual Basic mit anderen Funktionen kombinieren können, um Abfrageprojektionen zu bilden.
Beispiel 1
Die folgenden Beispiele verwenden die Select
-Klausel in Visual Basic (select
-Klausel in C#), um eine Sequenz mit Kontaktnamen für Customers
zurückzugeben.
var nameQuery =
from cust in db.Customers
select cust.ContactName;
Dim nameQuery = From cust In db.Customers _
Select cust.ContactName
Beispiel 2
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.
var infoQuery =
from cust in db.Customers
select new { cust.ContactName, cust.Phone };
Dim infoQuery = From cust In db.Customers _
Select cust.ContactName, cust.Phone
Beispiel 3
Das folgende Beispiel verwendet die Select
-Klausel in Visual Basic (select
-Klausel in C#) und anonyme Typen, um eine Sequenz von Namen und Telefonnummern für Mitarbeiter*innen zurückzugeben. Das Feld FirstName
und das Feld LastName
werden zu einem einzigen Feld (Name
) kombiniert, und das Feld HomePhone
wird in der resultierenden Sequenz in Phone
umbenannt.
var info2Query =
from emp in db.Employees
select new
{
Name = emp.FirstName + " " + emp.LastName,
Phone = emp.HomePhone
};
Dim info2Query = From emp In db.Employees _
Select Name = emp.FirstName & " " & emp.LastName, _
Phone = emp.HomePhone
Beispiel 4
Das folgende Beispiel verwendet die Select
-Klausel in Visual Basic (select
-Klausel in C#) und anonyme Typen, um eine Sequenz aller ProductID
s und einen berechneten Wert namens HalfPrice
zurückzugeben. Dieser Wert wird auf den UnitPrice
, geteilt durch 2, festgelegt.
var specialQuery =
from prod in db.Products
select new { prod.ProductID, HalfPrice = prod.UnitPrice / 2 };
Dim specialQuery = From prod In db.Products _
Select prod.ProductID, HalfPrice = CDec(prod.UnitPrice) / 2
Beispiel 5
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.
var prodQuery =
from prod in db.Products
select new
{
prod.ProductName,
Availability =
prod.UnitsInStock - prod.UnitsOnOrder < 0
? "Out Of Stock" : "In Stock"
};
Dim prodQuery = From prod In db.Products _
Select prod.ProductName, Availability = _
If(prod.UnitsInStock - prod.UnitsOnOrder < 0, _
"Out Of Stock", "In Stock")
Beispiel 6
Das folgende Beispiel verwendet die Select
-Klausel in Visual Basic (select
-Klausel in C#) und einen bekannten Typ (Name), um eine Sequenz mit den Namen der Mitarbeiter*innen zurückzugeben.
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
};
}
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}
Beispiel 7
Das folgende Beispiel verwendet Select
und Where
in Visual Basic (select
und where
in C#), um eine gefilterte Sequenz mit Kontaktnamen von Kund*innen in London zurückzugeben.
var contactQuery =
from cust in db.Customers
where cust.City == "London"
select cust.ContactName;
Dim contactQuery = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust.ContactName
Beispiel 8
Das folgende Beispiel verwendet die Select
-Klausel in Visual Basic (select
-Klausel in C#) und anonyme Typen, um eine geformte Teilmenge der Daten zu Kund*innen zurückzugeben.
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 }
};
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}
Beispiel 9
Im folgenden Beispiel werden geschachtelte Abfragen verwendet, um die folgenden Ergebnisse zurückzugeben:
Eine Sequenz aller Bestellungen und der entsprechenden
OrderID
s.Eine Untersequenz der Elemente in der Bestellung, für die es einen Rabatt gibt.
Der gesparte Betrag, wenn die Lieferkosten nicht eingeschlossen werden.
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
};
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