ADO.NET - 动态循环遍历 SqlDataReader 列并将这些值分配给 C# 对象
ADO.NET - Loop through SqlDataReader columns dynamically and assign those values to C# Object
我有一个应用程序,学生可以使用该应用程序 select 他们希望加入的大学,在该应用程序中,我们目前可以选择 select 最多 3 所大学,我们说第一首选,第二首选和第三首选,我们有一个存储过程,其中 returns 结果集的数据和列如下所示。
UserId | FirstName | LastName | Email | Mobile | City |
FirstPreferredCollegeId | FirstPreferredCollegeName |
FirstPreferredCollegeGrade | FirstPreferredCollegePincode |
SecondPreferredCollegeId | SecondPreferredCollegeName |
SecondPreferredCollegeGrade | SecondPreferredCollegePincode |
ThirdPreferredCollegeId | ThirdPreferredCollegeName |
ThirdPreferredCollegeGrade | ThirdPreferredCollegePincode |
如果我们查看上面的结果集,UserId、FirstName、LastName、Email、Mobile、City 是唯一的,其中 PreferredCollegeId、PreferredCollegeName、PreferredCollegeGrade、PreferredCollegePinCode 重复三次。
我的 C# 模型如下所示。
Public Class User
{
Public int UserId {get;set;}
Public string FirstName {get;set;}
public string LastName {get;set;}
public string Email {get;set;}
public string Mobile {get;set;}
public string City {get;set;}
public List<Choice> Choices {get;set;}
}
public class Choice
{
public string PreferredCollegeId {get;set;}
public string PreferredCollegeName {get;set;}
public string PreferredCollegeGrade {get;set;}
public string PreferredCollegePincode {get;set;}
}
现在 ADO.NET 代码如下所示,reader 是 SqlDataReader
对象。
objUser.UserId = (string)reader["UserId"];
objUser.FirstName = (string)reader["FirstName"];
objUser.LastName = (string)reader["LastName"];
objUser.Email = (string)reader["Email"];
objUser.Mobile = (string)reader["Mobile"];
objUser.City = (string)reader["City"];
/* Here I need to loop through reader and get College details
Choice ch = new Choice();
现在我需要遍历 SqlDataReader
并获取 PreferredCollegeId、PreferredCollegeName、PreferredCollegeGrade、PreferredCollegePincode 并动态创建一个 Choice class 对象并将这些值绑定到 Choice 对象 - 怎么做我做到了吗?
尝试这样的事情:
var prefixes = new List<string> {"First", "Second", "Third"};
objUser.Choices = new List<Choice>();
foreach(var prefix in prefixes)
{
objUser.Choices.Add(new Choice {
PreferredCollegeId= (string) reader[prefix + "PreferredCollegeId"],
PreferredCollegeName = (string) reader[prefix + "PreferredCollegeName"],
PreferredCollegeGrade = (string) reader[prefix + "PreferredCollegeGrade"],
PreferredCollegePincode = (string) reader[prefix + "PreferredCollegePincode"]
});
}
我有一个应用程序,学生可以使用该应用程序 select 他们希望加入的大学,在该应用程序中,我们目前可以选择 select 最多 3 所大学,我们说第一首选,第二首选和第三首选,我们有一个存储过程,其中 returns 结果集的数据和列如下所示。
UserId | FirstName | LastName | Email | Mobile | City |
FirstPreferredCollegeId | FirstPreferredCollegeName |
FirstPreferredCollegeGrade | FirstPreferredCollegePincode |
SecondPreferredCollegeId | SecondPreferredCollegeName |
SecondPreferredCollegeGrade | SecondPreferredCollegePincode |
ThirdPreferredCollegeId | ThirdPreferredCollegeName |
ThirdPreferredCollegeGrade | ThirdPreferredCollegePincode |
如果我们查看上面的结果集,UserId、FirstName、LastName、Email、Mobile、City 是唯一的,其中 PreferredCollegeId、PreferredCollegeName、PreferredCollegeGrade、PreferredCollegePinCode 重复三次。
我的 C# 模型如下所示。
Public Class User
{
Public int UserId {get;set;}
Public string FirstName {get;set;}
public string LastName {get;set;}
public string Email {get;set;}
public string Mobile {get;set;}
public string City {get;set;}
public List<Choice> Choices {get;set;}
}
public class Choice
{
public string PreferredCollegeId {get;set;}
public string PreferredCollegeName {get;set;}
public string PreferredCollegeGrade {get;set;}
public string PreferredCollegePincode {get;set;}
}
现在 ADO.NET 代码如下所示,reader 是 SqlDataReader
对象。
objUser.UserId = (string)reader["UserId"];
objUser.FirstName = (string)reader["FirstName"];
objUser.LastName = (string)reader["LastName"];
objUser.Email = (string)reader["Email"];
objUser.Mobile = (string)reader["Mobile"];
objUser.City = (string)reader["City"];
/* Here I need to loop through reader and get College details
Choice ch = new Choice();
现在我需要遍历 SqlDataReader
并获取 PreferredCollegeId、PreferredCollegeName、PreferredCollegeGrade、PreferredCollegePincode 并动态创建一个 Choice class 对象并将这些值绑定到 Choice 对象 - 怎么做我做到了吗?
尝试这样的事情:
var prefixes = new List<string> {"First", "Second", "Third"};
objUser.Choices = new List<Choice>();
foreach(var prefix in prefixes)
{
objUser.Choices.Add(new Choice {
PreferredCollegeId= (string) reader[prefix + "PreferredCollegeId"],
PreferredCollegeName = (string) reader[prefix + "PreferredCollegeName"],
PreferredCollegeGrade = (string) reader[prefix + "PreferredCollegeGrade"],
PreferredCollegePincode = (string) reader[prefix + "PreferredCollegePincode"]
});
}