实体框架嵌套查询



我是 LINQ 的新手,我想编写最简单的嵌套查询。

我有两个对象列表:客户和订单。

public class Client
{
public int Id { get; set; }
public int Name{ get; set; }
}
public class Order
{
public int Id { get; set; }
public int ClientId{ get; set; }
public Client Client{ get; set; }
public DateTime DateOfOrder{ get; set; }
}

我想获得在过去 6 个月内有订单的客户。 在SQL中,它将是:

SELECT * FROM CLIENTS WHERE ClientId IN 
(SELECT ClientId FROM ORDERS WHERE DateOfOrder>'2020-01-01')

我假设我需要使用"包含",但我不知道如何返回 ClientId 列表而不是订单列表。

var clients=db.Clients.Where(c=>db.Orders.Where(a=>a.DateOfOrder>DateTime.Now.AddDays(-183).ToList().Contains(c.ClientId)).ToList();

删除ToList并在内部查询中使用Select。像这样:

var clients = db.Clients 
.Where(c => db.Orders
.Where(a => a.DateOfOrder > DateTime.Now.AddDays(-183))
.Select(a => a.ClientId)
.Contains(c.ClientId))
.ToList();

最新更新