我正在尝试将Linq结果转换为数据表
我有一个从许多表的数据集创建的linq。它返回结果,但我需要将结果输入到新的数据表中。
我见过的例子说我可以使用.CopyToDataTable但是由于某种原因这不起作用吗?
我注意到我可以.ToArray也许我可以将数组转换为数据表?似乎排除了不必要的步骤?
这是我的查询:(可行)
Dim R2 = From Inq In DS.Tables!CNLocalInquiry.AsEnumerable()
Join Cust In DS.Tables!CustomerID.AsEnumerable() On Inq.Field(Of Integer)("CNLocalInquiry_Id") Equals Cust.Field(Of Integer)("CNLocalInquiry_Id")
Select New With {.date = Inq.Field(Of String)("date"),
.CName = Cust.Field(Of String)("CustomerNumber"),
.Name = Cust.Field(Of String)("name")}
Dim MemberInq as new datatable
MemberInq = R2.CopyToDataTable() <-- this doesn't work
答案 0 :(得分:1)
(这是易于编码的方式......对于大型数据集而言,这不具备性能)
public static class ToolsEx
{
public static DataTable ToDataTable<T>(this IEnumerable<T> items)
{
var t = typeof(T);
var dt = new DataTable(t.Name);
var props = t.GetProperties()
.Select(p => new { N = p.Name, Getter = p.GetGetMethod() })
.Where(p => p.Getter != null)
.ToList();
props.ForEach(p => dt.Columns.Add(p.N));
foreach (var item in items)
dt.Rows.Add(props.Select(p => p.Getter.Invoke(item, null)).ToArray());
return dt;
}
}
答案 1 :(得分:1)
我已将此保存为扩展方法,并且它始终完美运行: https://msdn.microsoft.com/en-us/library/bb669096.aspx
这里的例子: https://msdn.microsoft.com/en-us/library/bb386921.aspx
希望这样做!