Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq选择拥有相同汽车的用户_C#_Linq_Group By - Fatal编程技术网

C# Linq选择拥有相同汽车的用户

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 !=

我有用户对象和汽车对象,它们可以通过订单对象建立多对多关系。我希望能够获得与user1拥有相同汽车的所有用户。如果我用SQL写这篇文章,下面将得到正确的结果

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答案有效吗?如果是的话,你能把它标记为正确的吗