如何在 C# 中将 List<DataRow> 转换为 List<T>?
Posted
技术标签:
【中文标题】如何在 C# 中将 List<DataRow> 转换为 List<T>?【英文标题】:How to convert List<DataRow> to List<T> in C#? 【发布时间】:2016-06-06 20:25:07 【问题描述】:如何将DataTable.Rows
集合转换为List<Category>
?
我想将数据行的值列表的值设置为 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<objUSerData.Category> = Convert.ToString(List<dr["category"]>);
无论如何都是无效的。您能否向我们展示您实际使用的可编译代码?或者,这是为了展示您希望实现的目标吗?
这就是我所说的一段奇怪的代码。它应该做什么?例如。 Convert.ToString(List<dr["category">)
??
@StefanSteinegger 我有一个从数据行中获取的类别集合,我如何在代码中提及语法正确?所以我在那里放了一个大概的代码。我坚持在那里完成语法。
@theB 我有一个从数据行中获取的类别集合,我如何在代码中提及语法正确?所以我在那里放了一个大概的代码。我坚持在那里完成语法。
好的,所以该行试图显示您想要做什么,但不确定?也许您可以在描述问题的代码块上方添加几句话,然后在代码中添加注释,以便我们知道这就是您的意图。
【参考方案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您可以使用 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"),
);
【讨论】:
以上是关于如何在 C# 中将 List<DataRow> 转换为 List<T>?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中将 List<object> 转换为 Hashtable?
如何在 C# 中将 List<byte> 转换为 byte[]?
如何在 .NET 6 / C# 10 中将 List<String?> 转换为 List<String>?
如何在 C# 中将 IEnumerable<T> 转换为 List<T>?
如何使用 StreamBuilder 消除颤振数据表错误“预期类型为 'List<DataRow>',但得到类型为 'List<dynamic>”的值之一?