Gewusst wie: Ausführen einer Abfrage, die eine Auflistung von anonymen Typen zurückgibt (Entity Framework)
In diesem Thema wird anhand von Beispielen gezeigt, wie Abfragen ausgeführt werden, die eine Auflistung von Instanzen eines anonymen Typs zurückgeben. Ein anonymer Typ ist ein Typ, der nicht im konzeptionellen Modell definiert wird. Die folgende Entity SQL-Abfrage gibt z. B. eine Auflistung von anonymen Typen zurück, die Zeilen mit zwei Spalten (eine ganze Zahl für die ProductID und eine Zeichenfolge für den Namen) enthalten: "SELECT p.ProductID, p.Name FROM AdventureWorksEntities.Products as p"
. Im folgenden Beispiel wird eine Auflistung von Produkten zurückgegeben, und der Product-Typ wird im konzeptionellen Modell definiert: "SELECT p FROM AdventureWorksEntities.Products as p"
.
Dasselbe Beispiel wird unter Verwendung der folgenden Entity Framework -Abfragetechnologien gezeigt:
LINQ-to-Entities
Entity SQL mit ObjectQuery<T>
Abfrage-Generator-Methoden von ObjectQuery<T>
Das Beispiel in diesem Thema beruht auf dem Adventure Works Sales-Modell. Zum Ausführen des Codes in diesem Thema muss dem Projekt bereits das Adventure Works Sales-Modell hinzugefügt und das Projekt zur Verwendung von Entity Framework konfiguriert worden sein. Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) bzw. Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework).
Beispiel
Im Folgenden handelt es sich um das LINQ to Entities -Beispiel.
Using context As New AdventureWorksEntities
Dim products As ObjectSet(Of Product) = context.Products
Dim query = _
From product In products _
Select New With _
{ _
.ProductId = product.ProductID, _
.ProductName = product.Name _
}
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 context = new AdventureWorksEntities())
{
var query =
from product in context.Products
select 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);
}
}
Im Folgenden handelt es sich um das Entity SQL -Beispiel.
Using context As New AdventureWorksEntities()
Dim myQuery As String = "SELECT p.ProductID, p.Name FROM AdventureWorksEntities.Products as p"
For Each rec As DbDataRecord In New ObjectQuery(Of DbDataRecord)(myQuery, context)
Console.WriteLine("ID {0}; Name {1}", rec(0), rec(1))
Next
End Using
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
string myQuery = @"SELECT p.ProductID, p.Name FROM
AdventureWorksEntities.Products as p";
foreach (DbDataRecord rec in
new ObjectQuery<DbDataRecord>(myQuery, context))
{
Console.WriteLine("ID {0}; Name {1}", rec[0], rec[1]);
}
}
Im Folgenden wird ein Beispiel für die Abfrage-Generator-Methode dargestellt.
Using context As New AdventureWorksEntities()
' Use the Select method to define the projection.
Dim query As ObjectQuery(Of DbDataRecord) = context.Products.Select("it.ProductID, it.Name")
' Iterate through the collection of data rows.
For Each rec As DbDataRecord In query
Console.WriteLine("ID {0}; Name {1}", rec(0), rec(1))
Next
End Using
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// Use the Select method to define the projection.
ObjectQuery<DbDataRecord> query =
context.Products.Select("it.ProductID, it.Name");
// Iterate through the collection of data rows.
foreach (DbDataRecord rec in query)
{
Console.WriteLine("ID {0}; Name {1}", rec[0], rec[1]);
}
}
Siehe auch
Aufgaben
Gewusst wie: Ausführen einer Abfrage, die Entitätstypobjekte zurückgibt (Entity Framework)
Gewusst wie: Ausführen einer Abfrage, die eine Auflistung von primitiven Typen zurückgibt (Entity Framework)
Gewusst wie: Ausführen einer parametrisierten Abfrage (Entity Framework)