Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将LINQ结果馈送到数据行_C#_Linq_Linq To Objects - Fatal编程技术网

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;     
}