【问题标题】:ADO.NET - Loop through SqlDataReader columns dynamically and assign those values to C# ObjectADO.NET - 动态循环遍历 SqlDataReader 列并将这些值分配给 C# 对象
【发布时间】:2021-02-21 18:23:29
【问题描述】:

我有一个应用程序,学生可以使用它选择他们希望加入的大学,在应用程序中,我们目前提供最多选择 3 所大学的选项,我们说第一首选、第二首选和第三首选,我们有一个存储过程它返回的数据和该结果集的列如下。

 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 代码如下所示,阅读器是 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 类的对象并将这些值绑定到 Choice 对象 - 我该如何实现?

【问题讨论】:

  • 你可能会发现 Dapper 在这方面做得很好,它非常轻量级,没有 EF 或 Linq2Sql 的笨重,它只是将列映射到对象

标签: c# sql-server ado.net sqldatareader


【解决方案1】:

试试这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2021-10-05
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多