我是 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();