C# 中对象的透视型场景

问题描述 投票:0回答:3

考虑这个场景

我有一个名为 User 的类,其中包含汽车类型列表(例如丰田、宝马)

也就是说一个用户可以拥有很多辆车。

假设我有一个 User 类型的列表。在当前的格式中,我可以轻松找到用户拥有的所有汽车。

我无法轻松做到的是找到拥有特定汽车类型的所有用户(例如拥有丰田汽车的所有用户)。

在经典数据库意义上,我希望能够旋转数据,但是在 C# 中处理此类对象时如何实现这样的操作?

谢谢 托马斯

c# database search object pivot
3个回答
4
投票

你们之间是一对多的关系,所以可以双向进行。获取拥有用户的汽车并获取拥有汽车的用户。请参阅以下 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

0
投票

您应该尝试使用 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 是一个列表、数组或类似的东西。


0
投票

您可以使用 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));
© www.soinside.com 2019 - 2024. All rights reserved.