gpt4 book ai didi

c# - Linq Entity Framework - 让所有客户的 ID 不在多对多表中

转载 作者:行者123 更新时间:2023-11-30 17:39:37 24 4
gpt4 key购买 nike

我有 2 个表:

客户

汽车

和多对多表 MM,它存储:

Customer_Id Car_Id

我如何获得 Car_Id 不在多对多表中的所有客户?

我试过这样的:

public async Task<IEnumerable<CustomerModel>> GetNewCustomersForCar(int carId)
{
var sentCustomers = await _unit.Repository<Car>().Queryable()
.SelectMany(a => a.AspNetUsers, (b, a) => new { b, a })
.Where(b => b.Id == carId)
.Select(ba => new CustomerModel()
{
Id = ba.a.Id,
Email = ba.a.Email
})
.ToListAsync();

var allCustomers = await _unit.Repository<AspNetUser>().Queryable()
.Select(c => new CustomerModel()
{
Id = c.Id,
Email = c.Email
}).ToListAsync();

return allCustomers.Where(ac => !sentCustomers.Contains(ac));

所以基本上我选择了所选汽车的所有客户,然后我检查了所有客户,最后我从多对多客户表中选择了所有不包含 Id 的客户。

获取所有尚未使用汽车的客户(所有使用过的汽车都具有多对多表中所选汽车的 ID)。

最佳答案

如果您的 AspNetUser 实体中有一个 Cars 导航属性,您可以这样做:

var query= await _unit.Repository<AspNetUser>()
.Queryable()
.Where(u=>!u.Cars.Any(c=>c.Id==carId))
.Select(c => new CustomerModel()
{
Id = c.Id,
Email = c.Email
})
.ToListAsync();

您还可以将 Where 更改为 .Where(u=>u.Cars.All(c=>c.Id!=carId)),可能是更具可读性

关于c# - Linq Entity Framework - 让所有客户的 ID 不在多对多表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com