C# 实体框架LINQ-访问实体字段,不获取它

C# 实体框架LINQ-访问实体字段,不获取它,c#,entity-framework-6,C#,Entity Framework 6,假设我有一个简单的实体: 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 > ite

假设我有一个简单的实体:

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);

我是否可以在不从数据库中提取项目的情况下执行此操作?

您可以使用内部选择:

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

您可以使用内部选择:

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

好的,那么不会首先计算
FirstOrDefault
?LINQ提供程序将知道它可以在sql端完成?它可以工作,但我尝试了相同的解决方案,但效果不理想。它与派生表进行内部连接,这对于大型表来说不是很聪明。因此,最好只查询价格并按其过滤。@p如果要检查SQL EF生成的内容,请将其添加到代码中(在查询之前):
dbContext.Database.Log=s=>System.Diagnostics.Debug.WriteLine
@pwas它将在服务器上求值。好的,那么
FirstOrDefault
不会首先求值吗?LINQ提供程序将知道它可以在sql端完成?它可以工作,但我尝试了相同的解决方案,但效果不理想。它与派生表进行内部连接,这对于大型表来说不是很聪明。因此,最好只查询价格并按其过滤。@p如果要检查SQL EF生成的内容,请将其添加到代码中(在查询之前):
dbContext.Database.Log=s=>System.Diagnostics.Debug.WriteLine@pwas将在服务器上对其进行评估。