2016-11-17 84 views
0

考慮我有簡單的實體:實體框架LINQ - 進入實體領域W/O讀取它

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

考慮我有ID唯一項目,並希望找到所有實體價格高於價格給定項目。

我可以這樣做:

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

我能做到這一點W/O從數據庫中獲取的項目?

回答

2

您可以使用一個內部的選擇:

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

好了,'FirstOrDefault'不會被第一evaluted? LINQ提供程序會知道它可以在SQL端完成? – pwas

+0

它的工作原理,但我正在嘗試相同的解決方案,它的工作不理想。它與派生表進行INNER JOIN,對於大型表來說不是很聰明。所以,最好簡單地查詢價格並過濾它。 – jorgonor

+1

@pwas如果您想檢查SQL EF生成的內容,請將其添加到您的代碼中(在查詢之前):'dbContext.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);' – trashr0x