0

このシナリオを検討してください

車の種類のリストを含む User というクラスがあります (例: トヨタ、BMW)

つまり、ユーザーは多くの車を持つことができます。

タイプ User のリストがあるとしましょう。この現在の形式では、ユーザーが所有するすべての車を簡単に見つけることができます。

私が簡単にできないことは、特定の種類の車を所有しているすべてのユーザー (たとえば、トヨタを所有しているすべてのユーザー) を見つけることです。

古典的なデータベースの意味では、データをピボットできるようにしたいのですが、C# でこのようなオブジェクトを操作する場合、どのようにそのような操作を実現するのでしょうか?

ありがとうトーマス

4

3 に答える 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
于 2013-04-18T15:36:14.717 に答える
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
                        };
    IEnumberable<User> usersWithBMW = users.Where(u => u.Cars.Any(c => c is BMW));
于 2013-04-18T15:46:26.997 に答える
0

まず、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 という名前の車を 1 つ以上所有しているすべてのユーザーを取得する」という意味です + MyCars は、リスト、配列、またはそのようなものであると想定されます。

于 2013-04-18T15:44:11.927 に答える