如何在c#中添加对象列表

本文关键字:添加 对象 列表 | 更新日期: 2023-09-27 18:07:14

我有一个用户,他有多辆车。我需要创建一个包含他所有汽车的所有属性的对象列表。

他CarTable

UserID   UserCarID
 101       C101
 101       C102
 101       C103

His Car Properties Table

UserCarID   Model  Year  Color
C101        Audi   2012  Black
C102        BMW    2012  Silver
C103        VW     2012  White
C104        Audi   2013  Black
C105        VW     2013  White

我想要一个列表,这样只有他的汽车列表显示

UserID UserCarID   Model  Year  Color
101    C101        Audi   2012  Black
101    C102        BMW    2012  Silver
101    C103        VW     2012  White

我试着

using (SqlConnection con = .....)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "Select * FROM CarTable Where UserID = @ID";
            cmd.Parameters.Add(new SqlParameter("@ID", UserID));
            SqlDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    for (int i = 0; i <= tempID.Length - 1; i++)
                    {
                        tempID[i] = -1;
                    }
                    int j = 0;
                    while (reader.Read())
                    {
                        tempID[j] = (int)reader["ID"];
                        j++;
                    }
                    reader.Close();
                }
            con.Close();
        }
        foreach (int carID in tempID)
        {
            if (carID > -1) return JsonConvert.SerializeObject(getAllCars(carID));
        }
        public static object getAllCars(int id){
            .........
            return carPropertiesObject;
        }

getAllCars返回Car的所有属性列表。这是可行的,但我只能得到C101的性质。我该怎么做呢?谢谢你

如何在c#中添加对象列表

我对你的确切问题有点不清楚,但我会试一试:

似乎是创建Car类的好时机:

class Car
{
    int UserID;
    int UserCarID;
    string Model; 
    int Year;  
    string Color;
}
然后

List<Car> cars = new List<Car>();
while(reader.read())
{
     Car newCar = new Car();
     newCar.UserId = Convert.ToInt32(reader["UserId"]); //Should probably use TryParse here, but I will use ToInt32 for simplicity sake
     //same for other columns
     cars.Add(newCar);
}

你用来处理查询结果的方法在我看来很奇怪。你这样做有什么特别的原因吗?

你的问题不太清楚。这似乎是一个SQL查询问题,而不是列表连接问题。

假设这些都是SQL Server中的表,您可以通过一个查询从数据库中获得结果:

Select * FROM CarTable, CarPropertiesTable
WHERE CarTable.UserId = CarPropertiesTable.UserId
AND CarTable.UserId = @ID

然后迭代返回的datarow并将它们转换为您的对象(参见关于创建Car类的另一个答案,这是一个非常好的主意),然后将它们序列化为JSON。