Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
通过Linq创建数据表_Linq - Fatal编程技术网

通过Linq创建数据表

通过Linq创建数据表,linq,Linq,请告知我如何使用以下源创建数据表: public class MyClass : IEquatable<My> { public int field1 { get; set; } public int field2 { get; set; } } List<MyClass> lst = new List<MyClass>(); MyClass e = new MyClass; e.field1 = 1; e.field2 = 2; lst.Add

请告知我如何使用以下源创建数据表:

public class MyClass : IEquatable<My>
{
  public int field1 { get; set; }
  public int field2 { get; set; }
}

List<MyClass> lst = new List<MyClass>();

MyClass e = new MyClass;
e.field1 = 1;
e.field2 = 2;

lst.Add(e);
公共类MyClass:IEquatable
{
公共int字段1{get;set;}
公共int字段2{get;set;}
}
List lst=新列表();
MyClass e=新的MyClass;
e、 字段1=1;
e、 字段2=2;
第1段添加(e);

如何使用Linq为field1和field2值创建datatable?

不幸的是,您不能使用任何酷炫的Linq特定代码,但您可以创建datatable,添加列,在已填充的列表上循环

DataTable dt = new DataTable();
dt.Columns.Add("field1");
dt.Columns.Add("Field2");

lst.ForEach(l => {

var dr = dt.NewRow();
    dr[0] = l.field1;
    dr[1] = l.field2;

    dt.Rows.Add(dr);
});
您可以使用扩展方法。查看MSDN文章


DT是一种特殊的预LINQ对象,表示“松散”类型的矩阵。可能有一个反射解决方案(与LINQ没有严格的关系),但只需创建DT(和列定义),然后添加具有值的新行(可以按列顺序为每行分配一个数组)。由于DT是一种变异结构,我建议使用标准的
foreach
来添加新行。(反射方法也会这样做,但会自动从给定的源中提取名称/类型。)我认为这是对
ForEach
的一种讨厌的使用-尽管这是首选!我从未使用过它,在语法上更倾向于使用
foreach
,并表明它不是一个纯粹的操作,不像大多数其他LINQ用法所期望的那样。这就是说,这显示了该方法的关键(可能需要键入列,并且可以按数组分配)。
DataTable table = lst.CopyToDataTable();