Я долго разбирался, как написать запрос на фильтрацию связанной сущности через Entity Framework Core при использовании Include, предположим, у меня есть два следующих класса:
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 inПриведенный выше пример, но я не знаю, как обращаться со связанной сущностью, используя Include / ThenInclude, например фильтрацию по OrderDetail.ProductName, Я много исследовал, но все еще не понял, поэтому в конце я должен использоватьВместо этого сохраните процедуру , что не рекомендуется большинством разработчиков.
Может быть, это может сделать linq sql?
Пожалуйста, помогите мне понятьи еще об этом!Большое спасибо всем, кто может поделиться своими знаниями!