C# 将LINQ结果馈送到数据行
这项工作:C# 将LINQ结果馈送到数据行,c#,linq,linq-to-objects,C#,Linq,Linq To Objects,这项工作: var Result = from e in actual.Elements select new { Key = e.Key, ValueNumber = e.Value.ValueNumber, ValueSt
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);
你能帮我修一下吗?我希望第二位代码能够正常工作,以便将其放入数据表中。我意识到2的语法是完全错误的。如何使用像这样的LINQ指定列?我无法提供太多帮助,只能在这里指出:
你可能想调查一下 我尚未对此进行测试,但这可能会为您指明正确的方向:
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
}).AsEnumerable();
DataTable dt = Result.CopyToDataTable(Result);
您可以编写一个简单的扩展方法,该方法接受任何IEnumerable,使用反射获取与T关联的PropertyDescriptor,并为每个属性创建一个DataColumn
什么是实际元素?另一个DataTable?元素是字典。关键部分是字符串。值部分是一个具有4个属性的类-ValueNumber、ValueString、ValueBinary、ValueDateTime…不,它不工作。它正在抛出编译错误。由于保护级别的原因,DataRow无法访问。如何解决这个问题?
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;
}