考虑这个场景
我有一个名为 User 的类,其中包含汽车类型列表(例如丰田、宝马)
也就是说一个用户可以拥有很多辆车。
假设我有一个 User 类型的列表。在当前的格式中,我可以轻松找到用户拥有的所有汽车。
我无法轻松做到的是找到拥有特定汽车类型的所有用户(例如拥有丰田汽车的所有用户)。
在经典数据库意义上,我希望能够旋转数据,但是在 C# 中处理此类对象时如何实现这样的操作?
谢谢 托马斯
你们之间是一对多的关系,所以可以双向进行。获取拥有用户的汽车并获取拥有汽车的用户。请参阅以下 C# 代码:
class Users
{
public string Name { get; set; }
public List<Car> Cars { get; set; }
}
class Car
{
public string Name { get; set; }
}
var users = new List<Users>
{
new Users
{
Name = "Bob",
Cars = new List<Car> { new Car { Name = "Toyota" } }
}
};
// Any Cars with Name "Toyota" in a User's list of cars.
var usersWithCar = users.Where(user => user.Cars.Any(car => car.Name == "Toyota"));
string userName = usersWithCar.Single().Name; // Bob
您应该尝试使用 Linq,首先您需要添加对 System.Linq 的引用(如果尚未完成)
接下来你可以做这样的事情:
List<User> Example = new List<User>();
var Users_Having_A_Renault_ZE = Example.Where(
Me => Me.MyCars.Any(
Car => Car.MyName == "Renault ZE"))
这意味着“拥有一辆以上名为雷诺 ZE 的汽车的所有用户” + 它假设 MyCars 是一个列表、数组或类似的东西。
您可以使用 LINQ 来实现此目的。
class Car {}
class Toyota : Car {}
class BMW : Car {}
class User
{
private readonly IList<Car> cars = new List<Car>();
public IList<Car> Cars { get { return cars; } }
public void AddCar(Car car)
{
Cars.Add(car);
}
}
User user1 = new User();
user1.AddCar(new BMW());
user1.AddCar(new Toyota());
User user2 = new User();
user2.AddCar(new BMW());
var users = new List<User> { user1, user2 };
IEnumerable<User> usersWithBMW = users.Where(u => u.Cars.Any(c => c is BMW));