gpt4 book ai didi

c# - 将 LINQ 结果提供给 DataROW

转载 作者:行者123 更新时间:2023-11-30 16:28:55 25 4
gpt4 key购买 nike

这个有效:

var Result = from e in actual.Elements
select new
{
Key = e.Key,
ValueNumber = e.Value.ValueNumber,
ValueString = e.Value.ValueString,
ValueBinary = e.Value.ValueBinary,
ValueDateTime = e.Value.ValueDateTime
};

但这行不通:

IEnumerable<DataRow> Result = from e in actual.Elements
select new DataRow
{
Key = e.Key,
ValueNumber = e.Value.ValueNumber,
ValueString = e.Value.ValueString,
ValueBinary = e.Value.ValueBinary,
ValueDateTime = e.Value.ValueDateTime
};

DataTable dt = Result.CopyToDataTable(Result);

你能帮我修好吗?我希望第二段代码能够工作,以便我可以将它放入 DataTable 中。我意识到 #2 中的语法完全错误。如何像这样使用 LINQ 指定列?

最佳答案

您可以编写一个简单的扩展方法,它接受任何 IEnumerable<T> , 使用反射得到 PropertyDescriptor s 与 T 关联,并创建一个 DataColumn对于每个

public static DataTable PropertiesToDataTable(this IEnumerable<T> source)
{
DataTable dt = new DataTable();

var props = TypeDescriptor.GetProperties(typeof(T));

foreach (PropertyDescriptor prop in props)
{
DataColumn dc = dt.Columns.Add(prop.Name,prop.PropertyType);
dc.Caption = prop.DisplayName;
dc.ReadOnly = prop.IsReadOnly;
}

foreach (T item in source)
{
DataRow dr = dt.Rows.NewRow();
foreach (PropertyDescriptor prop in props)
dr[prop.Name] = prop.GetValue(item);

dt.Rows.Add(dr);
}

return dt;
}

关于c# - 将 LINQ 结果提供给 DataROW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6784791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com