将Linq结果转换为数据表

时间:2016-10-21 17:06:55

标签: vb.net linq

我正在尝试将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

这是我的查询返回的内容: query returns

2 个答案:

答案 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

希望这样做!