【问题标题】:Pivot-type scenario with objects in C#C# 中带有对象的枢轴类型场景
【发布时间】:2013-04-18 15:29:59
【问题描述】:

考虑这种情况

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

也就是说,一个用户可以拥有许多汽车。

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

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

在经典的数据库意义上,我希望能够对数据进行透视,但是在 C# 中使用这样的对象时如何实现这样的操作?

谢谢 托马斯

【问题讨论】:

    标签: c# database search object pivot


    【解决方案1】:

    你有一个一对多的关系,所以你可以双向。有车有车,有车有车。请参阅以下 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
    

    【讨论】:

      【解决方案2】:

      您应该尝试使用 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"))
      

      它的意思是“接受所有拥有一辆或多辆名为 Renault ZE 的汽车的用户” + 它假定 MyCars 是一个 List、一个数组或类似的东西。

      【讨论】:

        【解决方案3】:

        您可以使用 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
                                };
            IEnumberable<User> usersWithBMW = users.Where(u => u.Cars.Any(c => c is BMW));
        

        【讨论】:

          猜你喜欢
          • 2021-01-31
          • 1970-01-01
          • 2018-03-05
          • 1970-01-01
          • 2021-07-16
          • 1970-01-01
          • 2020-01-05
          • 1970-01-01
          • 2023-03-30
          相关资源
          最近更新 更多