Um das zu erreichen, was Sie brauchen Sie nicht andere Wahl haben, als Sie Ihre Anfrage an einen anonymen Typ oder ein DTO projizieren. Wie Sie sehen können, können Sie in der Erweiterungsmethode Include
einfach die verknüpften Entitäten angeben, die Sie laden möchten und die in einem inneren Join mit einer Tabelle (oder mehreren Joins, siehe Abschnitt im zitierten Link) übersetzt werden Das bedeutet nicht, dass Sie alle Eigenschaften aus den zugehörigen Entitäten laden. Wenn Sie die Methode Select
aufrufen, können Sie auswählen, welche Spalten Sie projizieren möchten, aber Sie können keine Linq-zu-Entitäten-Abfrage mit einem Entitätstyp projizieren. Sie müssen eine der beiden Optionen verwenden, die ich oben kommentiert habe. So ist mein Rat in Ihrer Business-Logik-Schicht eine Reihe von Klassen (DTOs) schafft das Ergebnis Ihrer Anfragen zu projizieren, zB:
public class ProductDTO
{
[DataMember]
public Guid ProductId {get; set;}
[DataMember]
public virtual IEnumerable<DateTime> TransactionDates { get; set; }
}
Später können Sie etwas tun:
var product = db.Products.Where(p => p.ProductId = productId)
.Select(pr=> new ProductDTO
{
ProductId = pr.ProductId,
TransactionDates = pr.Transactions.Select(tr=>tr.Date),
}.ToList();
Siehe ich muss Include
Erweiterungsmethode in diesem Fall nicht aufrufen, da ich in Select
eine Spalte von Transactions
Tabelle projiziere. An diesem Punkt sind die Daten noch nicht geladen, Sie definieren nur eine linq-Abfrage, die später in sql übersetzt wird. Wenn das stattfindet ?, wenn Sie ToList
Erweiterungsmethode aufrufen.
Als letzte Empfehlung empfehle ich Ihnen, einen Blick auf Automapper zu werfen. Sobald Sie Ihre Einheiten mit ihren jeweiligen DTOs zugeordnet haben, können Sie Ihre Abfragen so sein:
var product = db.Products.Where(p => p.ProductId == productId)
.ProjectTo<ProductDTO>()
.ToList();
Weitere Daten zu ProjectTo
Extension-Methode in diesem link
können Sie nicht „nicht geladen werden“ 'TransactionId' und' Kunden, weil sie bereits geladen wurden, da sie keine Navigationseigenschaften sind. Und selbst du konntest das tun, du würdest keinen Nutzen daraus ziehen ... – haim770