我有以下实体:
public class Order
{
public int Id { get; set; }
public ICollection<LineItem> LineItems { get; set; }
}
public class LineItem
{
public int Id { get; set; }
public int Qty { get; set; }
}
我只想检查订单中是否有大件商品(数量> 50),所以我想向Order类添加一个属性,如下所示:
public class Order
{
public int Id { get; set; }
public ICollection<LineItem> LineItems { get; set; }
public bool HasLargeItems
{
get
{
return LineItems.Any(l => l.Qty > 50);
}
}
}
但是,由于延迟加载,此方法不起作用。但是,如果我使用.Include(o => o.LineItems),它将获取所有LineItem,然后进行内存中比较。我宁愿让它生成并针对数据库执行查询,然后让我返回一个布尔值。
这是否可以作为Order实体的属性来执行,还是必须编写其他一些使用DbContext执行此类检查的外部查询对象?
答案 0 :(得分:0)
一种方法是使用匿名选择
var order = dbContext.Orders
.Where(o => o.Id == id)
.Select(o => new { Order = o, HasLargeItems = o.LineItems.Count > 50 })
.SingleOrDefault();
答案 1 :(得分:0)
尝试此操作可能会有所帮助:
public bool HasItems
{
get{return LineItems.AsQueryable().Any(x => false);}
}