C# Linq选择拥有相同汽车的用户
我有用户对象和汽车对象,它们可以通过订单对象建立多对多关系。我希望能够获得与user1拥有相同汽车的所有用户。如果我用SQL写这篇文章,下面将得到正确的结果C# Linq选择拥有相同汽车的用户,c#,linq,group-by,C#,Linq,Group By,我有用户对象和汽车对象,它们可以通过订单对象建立多对多关系。我希望能够获得与user1拥有相同汽车的所有用户。如果我用SQL写这篇文章,下面将得到正确的结果 SELECT * FROM users WHERE id IN (SELECT userId FROM orders WHERE carId IN (SELECT carId FROM orders WHERE userId = 1) ) AND id !=
SELECT * FROM users
WHERE id IN (SELECT userId
FROM orders WHERE carId
IN (SELECT carId FROM orders WHERE userId = 1)
)
AND id != 1
如何将LINQ与顺序的列表和用户的列表一起使用
我的模型:
public class Order
{
public int UserId { get; set; }
public int CarId { get; set; }
}
我的代码:
var orders = new List<Order>();
orders.Add(new Order() { CarId = 1, UserId = 1 });
orders.Add(new Order() { CarId = 1, UserId = 2 });
orders.Add(new Order() { CarId = 2, UserId = 3 });
orders.Add(new Order() { CarId = 2, UserId = 1 });
orders.Add(new Order() { CarId = 3, UserId = 1 });
orders.Add(new Order() { CarId = 4, UserId = 3 });
var usersHasAnyCars = new Dictionary<int,int[]>();
foreach (var user1 in orders.GroupBy(q=>q.UserId))
{
foreach (var user2 in usersHasAnyCars[user1.Key])
{
//my logic
//all users which have any car from cars of user1
}
}
var orders=新列表();
Add(neworder(){CarId=1,UserId=1});
Add(neworder(){CarId=1,UserId=2});
Add(neworder(){CarId=2,UserId=3});
Add(neworder(){CarId=2,UserId=1});
Add(neworder(){CarId=3,UserId=1});
Add(neworder(){CarId=4,UserId=3});
var usersHasAnyCars=新字典();
foreach(orders.GroupBy中的var user1(q=>q.UserId))
{
foreach(usersHasAnyCars[user1.Key]中的var user2)
{
//我的逻辑
//所有拥有user1车辆中任何车辆的用户
}
}
例如:
- 对于用户id=1,结果是用户id=2和id=3
- 对于用户id=2,结果是用户id=1
- 对于用户id=3,结果是用户id=1
解决方案必须非常快,因为我有很多数据。
最好的解决方案是使用LINQ。您可以更换2个foreach,仅此而已:
var usersHasAnyCars=orders.GroupBy(x=>x.UserId).ToDictionary(x=>x.Key,x=>x.Count())代码>
更新
作为对您的评论的回应,您可以获得拥有属于User1的汽车的用户,如下所示:
var carsFromUser1 = orders.Where(o => o.UserId == 1).Select(o => o.CarId);
var usersHasAnyCars = orders.Where(o => carsUser1.Contains(o.CarId) && o.UserId != 1);
您可以更换2个foreach,只需执行以下操作:
var usersHasAnyCars=orders.GroupBy(x=>x.UserId).ToDictionary(x=>x.Key,x=>x.Count())代码>
更新
作为对您的评论的回应,您可以获得拥有属于User1的汽车的用户,如下所示:
var carsFromUser1 = orders.Where(o => o.UserId == 1).Select(o => o.CarId);
var usersHasAnyCars = orders.Where(o => carsUser1.Contains(o.CarId) && o.UserId != 1);
你实际上在寻找什么?你的代码没有填充usersHasAnyCars
如何获取用户列表,哪些用户拥有来自cars user1的汽车?你实际上在寻找什么?你的代码没有填充usersHasAnyCars
如何获取用户列表,哪些用户拥有来自cars user1的汽车?谢谢,但这给了我用户的汽车,我想重复一下用户,他们至少有一辆车来自User1haha的车,同时澄清你独立更新答案的问题alike@wal92答案有效吗?如果是,请您标记为正确谢谢,但这给了我用户的车,我想迭代用户,其中至少有一辆车来自User1haha的车,同时澄清问题您独立更新了答案伟人认为alike@wal92答案有效吗?如果是的话,你能把它标记为正确的吗