通过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();