简体   繁体   English

ADO.NET - 动态循环遍历 SqlDataReader 列并将这些值分配给 C# Object

[英]ADO.NET - Loop through SqlDataReader columns dynamically and assign those values to C# Object

I have an application using which the students can select the colleges they wish to join, in the application we currently give option to select max of 3 colleges and we say 1st preferred, 2nd preferred and 3rd preferred, we have a stored procedure which returns the data and the columns of that result set are as below.我有一个应用程序,学生可以使用它 select 他们希望加入的大学,在应用程序中,我们目前提供 select 最多 3 所大学的选项,我们说第一首选,第二首选和第三首选,我们有一个存储过程,它返回该结果集的数据和列如下。

 UserId | FirstName | LastName | Email | Mobile | City |
 FirstPreferredCollegeId | FirstPreferredCollegeName |
 FirstPreferredCollegeGrade | FirstPreferredCollegePincode |
 SecondPreferredCollegeId | SecondPreferredCollegeName |
 SecondPreferredCollegeGrade | SecondPreferredCollegePincode |
 ThirdPreferredCollegeId | ThirdPreferredCollegeName |
 ThirdPreferredCollegeGrade | ThirdPreferredCollegePincode |

If we look at the above result set UserId, FirstName, LastName, Email, Mobile, City are unique where are PreferredCollegeId, PreferredCollegeName, PreferredCollegeGrade, PreferredCollegePinCode are repeating thrice.如果我们查看上面的结果集 UserId, FirstName, LastName, Email, Mobile, City 是唯一的,其中 PreferredCollegeId、PreferredCollegeName、PreferredCollegeGrade、PreferredCollegePinCode 重复三次。

My c# model looks like below.我的 c# model 如下所示。

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;}
}

Now ADO.NET code looks like below, reader is SqlDataReader object.现在 ADO.NET 代码如下所示,阅读器是SqlDataReader object。

 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();

Now I need to loop through the SqlDataReader and get the PreferredCollegeId, PreferredCollegeName, PreferredCollegeGrade, PreferredCollegePincode and dynamically create an object of Choice class and bind these values to the Choice object - how do I achieve this?现在我需要遍历SqlDataReader并获取 PreferredCollegeId、PreferredCollegeName、PreferredCollegeGrade、PreferredCollegePincode 并动态创建选择 class 的 object 并将这些值绑定到选择 ZA8CFDE63311C4B666C

Try something like this:尝试这样的事情:

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"]
   });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM