【问题标题】:How to convert List<DataRow> to List<T> in C#?如何在 C# 中将 List<DataRow> 转换为 List<T>?
【发布时间】:2016-06-06 20:25:07
【问题描述】:

如何将DataTable.Rows 集合转换为List&lt;Category&gt;

我想将数据行的值列表的值设置为 C# 对象的值列表,如下面的代码中所述。好心的建议。

UserData objUserData = null;
DataTable dtUserData = DataAccess.getUserDataTable();  
if(dtUserData.Rows.Count>0)
{
    foreach(DataRow dr in dtUserData.Rows)
    {
      objUSerData = new UserData();
      List<objUSerData.Category> = Convert.ToString(List<dr["category"]>);
    } 
}

这是Category 类:

[DataContract]
public class category { get; set; }
{
  public string category_id {get; set;}
  public string category_name {get; set;}
}

【问题讨论】:

  • List&lt;objUSerData.Category&gt; = Convert.ToString(List&lt;dr["category"]&gt;); 无论如何都是无效的。您能否向我们展示您实际使用的可编译代码?或者,这是为了展示您希望实现的目标吗?
  • 这就是我所说的一段奇怪的代码。它应该做什么?例如。 Convert.ToString(List&lt;dr["category"&gt;)??
  • @StefanSteinegger 我有一个从数据行中获取的类别集合,我如何在代码中提及语法正确?所以我在那里放了一个大概的代码。我坚持在那里完成语法。
  • @theB 我有一个从数据行中获取的类别集合,我如何在代码中提及语法正确?所以我在那里放了一个大概的代码。我坚持在那里完成语法。
  • 好的,所以该行试图显示您想要做什么,但不确定?也许您可以在描述问题的代码块上方添加几句话,然后在代码中添加注释,以便我们知道这就是您的意图。

标签: c# .net serialization orm ado.net


【解决方案1】:

只是猜测:

您可能希望从您的行创建 UserData:

foreach(DataRow dr in dtUserData.Rows)
{
   var userData = new UserData();
   // create an array with a single element
   userData.Categories = new [] 
   {
     new Category
     {
       category_id = ??,
       category_name = Convert.ToString(dr["category"])
     }
   };
   // not sure about this:
   userData.UserDetails = new [] 
   {
     new UserDetails
     {
       Whatever = Convert.ToString(dr["userdetails"]),
     }
   };
}

其实我也不知道dr["userdetails"]是什么类型。

可能您需要将行映射到实体。这些实体可能在另一个数据库中找到。该类别可能已经在那里找到,如果没有,则可能需要创建它。如果是这样,一切都会复杂得多。

用户数据很可能是更复杂的记录,我不知道行中的字段后面是什么。

因为问题中没有更多信息,我只能猜测。

【讨论】:

  • UserData 是我的域模型,其中包括多个列表,如类别、用户详细信息,那么我该如何处理呢?
  • 在你的例子中,userData对象categorylist之间没有关系吗?
  • @user6410893:你想用这些列表做什么?
  • 我想将数据行转换为我的 c# 对象,并将输出作为 json 返回给使用该服务的客户。
  • 您不能查询 DataTable 的 Rows 集合,因为 DataRowCollection 没有实现 IEnumerable。您需要对 DataTable 使用 AsEnumerable() 扩展 - 来自线程 stackoverflow.com/questions/10855/…
【解决方案2】:

您可以使用 linq 或循环创建 category 类的实例:

DataTable dtUserData = DataAccess.getUserDataTable();
var list = dtUserData.Rows.Cast<DataRow>()
                     .Select(row => new category()
                     {
                         category_id = row.Filed<string>("category_id"),
                         category_name = row.Filed<string>("category_name"),
                     }).ToList();

相当于:

var list = new List<category>();
foreach(DataRow row in dtUserData.Rows)
{
    list.Add(new category()
        {
            category_id = row.Filed<string>("category_id"),
            category_name = row.Filed<string>("category_name"),
        });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2021-11-26
    • 2011-07-02
    • 2019-04-13
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多