-4

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

他的车桌

UserID   UserCarID
 101       C101
 101       C102
 101       C103

他的汽车属性表

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 的属性。我该怎么做呢?谢谢你

4

2 回答 2

1

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

似乎是创建 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);
}

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

于 2013-04-03T22:17:40.120 回答
1

你的问题不是很清楚。这似乎是 SQL 查询问题,而不是列表加入问题。

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

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

然后遍历返回的 DataRows 并将它们转换为您的对象(请参阅有关创建 Car 类的另一个答案,一个非常好的主意),然后将它们序列化为 JSON。

于 2013-04-03T22:18:38.110 回答