![](/img/trans.png)
[英]How can I query in efcore for results where a condition is met in a collection of a collection of the dbset?
[英]How do I create hierarchical query with where condition on the children collection
我有這個 SQL 查詢:
SELECT *
FROM Orders o
INNER JOIN OrderItems i on o.Id = i.OrderId
WHERE i.SomeFlag = 0
如何將此 SQL 轉換為 EF 分層查詢,該查詢將返回帶有 OrderItems 作為子集合的 Orders?
重要提示:注意 OrderItems 的 where 條件!
EF Model如下:
class Order
{
public int Id { get; set; }
public List<OrderItem> OrderItems { get; set; }
}
class OrderItem {
public int OrderId { get; set; }
public int ProductId { get; set; }
public bool SomeFlag { get; set; }
public Order Order { get; set; }
}
class MyDbContext : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<OrderItems> OrderItems { get; set; }
}
查詢必須返回IQueryable<T>
,其中 T 不能是平面結構。 它必須是一個層次結構,就像 Order/OrderItem
您的Order
和OrderItem
類應如下所示:
class Order
{
public int Id { get; set; }
// Navigation property
public IColection<OrderItem> OrderItems { get; set; }
}
class OrderItem
{
public int Id { get; set; }
public int OrderId { get; set; }
// Navigation property
public Order Order { get; set; }
}
class MyDbContext : DbContext
{
...
public DbSet<Order> Orders { get; set; }
public DbSet<OrderItem> OrderItems { get; set; }
}
查詢:
_context.Orders.Include(x => x.OrderItems).Where(x => x.OrderItems.Any(q => q.SomeFlag));
現在,您擁有所有訂單,其中每個訂單項目都具有SomeFlag
屬性的true
值。
在 EF5 及更高版本中,您可以使用過濾包含,例如:
_context.Orders.Include(x => x.OrderItems.Where(x => x.SomeFlag));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.