我有一个拥有多辆车的用户。我需要创建一个他所有汽车所有属性的对象列表。
他的CarTable
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的属性。我该怎么做呢?谢谢
答案 0 :(得分: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);
}
您用来处理查询结果的方法对我来说非常奇怪。您是否有这样的具体原因?
答案 1 :(得分:1)
你的问题不是很清楚。这似乎是一个SQL查询问题,而不是列表加入问题。
假设这些都是SQL Server中的表,您可以使用单个查询从数据库中获取结果:
Select * FROM CarTable, CarPropertiesTable
WHERE CarTable.UserId = CarPropertiesTable.UserId
AND CarTable.UserId = @ID
然后迭代返回的DataRows并将它们转换为您的对象(请参阅有关创建Car类的其他答案,这是一个非常好的主意),然后将它们序列化为JSON。