2016-11-17 1 views
0

Betrachten ich einfache Einheit haben:Entity Framework LINQ - Zugriffseinheit Feld w/o es Holen

public class Item 
{ 
    public int Id { get; set; } 
    public decimal Price { get; set; } 
} 

Betrachten I id bekommen haben nur Artikel und möchten alle Objekte finden, dass der Preis von mehr als Preis Artikel gegeben.

kann ich tun:

var item = dbContext.Items.Find(id); 
var found = dbContext.Items.Where(off => off.Price > item.Price); 

Kann ich das w/o Artikel aus der Datenbank zu holen?

Antwort

2

können Sie eine innere wählen Sie verwenden:

var found = dbContext.Items.Where(off => off.Price > dbContext.Items.FirstOrDefault(x => x.Id == id).Price); 
+0

Ok, so 'FirstOrDefault' zuerst werden nicht evaluted? LINQ-Anbieter wird wissen, dass es auf SQL-Seite getan werden kann? – pwas

+0

Es funktioniert, aber ich habe die gleiche Lösung versucht und es funktioniert suboptimal. Es macht einen INNEREN JOIN mit einem abgeleiteten Tisch, etwas, das für große Tische nicht sehr klug ist. Also, es ist besser, einfach den Preis abzufragen und danach zu filtern. – jorgonor

+1

@pwas Wenn Sie überprüfen möchten, was SQL EF generiert, fügen Sie dies Ihrem Code (vor den Abfragen) hinzu: 'dbContext.Database.Log = s => System.Diagnostics.Debug.WriteLine (s);' – trashr0x