【发布时间】:2018-06-01 03:45:02
【问题描述】:
我一直在研究如何在使用 Include 时编写关于通过 Entity Framework Core 过滤相关实体的查询,假设我有以下两个类:
public class Order
{
public int OrderId {get; set;}
public String CreatedBy{get; set;}
public virtual Collection<OrderDetail> OrderDetails { get; set; } = new Collection<OrderDetail>();
}
public class OrderDetail
{
public Int64? OrderDetailID { get; set; }
public Int64? OrderID { get; set; }
public string ProductName { get; set; }
}
如果我想查找由“Jason”创建的所有订单,并且哪个订单详细信息的产品名称等于“Apple”,在 sql 中会是这样的: 隐藏复制代码
SELECT *
FROM Orders O
INNER JOIN OrderDetail OD ON O.OrderId = OD.OrderId
WHERE O.CreationUser = 'Jason' and OD.ProductName = 'Apple'
但是我无法弄清楚如何使用 EntityFramework 来编写它,如下所示的内容不起作用:
await DbContext.Set<Order>()
.Include(p => p.OrderDetails)
.Where(o => o.CreationUser == "Jason")
.Where(o => o.OrderDetails.Where(od => od.ProductName == "Apple"));
有像上面这样的场景,我知道如何使用上面示例中的 Order 等基实体类过滤属性,但我不知道如何使用 Include/ThenInclude 处理相关实体,例如对 OrderDetail.ProductName 进行过滤, 我已经研究了很多,但仍然没有任何线索,因此最后我不得不使用 Store 程序来代替,大多数开发人员不建议这样做。
也许 linq sql 可以做到这一点?
请帮助我更多地了解它!非常感谢所有可以分享您的知识的人!
【问题讨论】:
-
something like below would not work:具体是什么不起作用?