首页 新闻 会员 周边

如何将LINQ查询的结果保存到DataTable中

0
悬赏园豆:10 [已解决问题] 解决于 2012-04-23 14:33

如何将LINQ查询的结果保存到DataTable中

kingboy8808的主页 kingboy8808 | 初学一级 | 园豆:5
提问于:2012-03-21 15:24
< >
分享
最佳答案
-1

public static DataTable CopyToDataTable<T>(this IEnumerable<T> array)
  {
  var ret = new DataTable();
  foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
  ret.Columns.Add(dp.Name, dp.PropertyType);
  foreach (T item in array)
  {
  var Row = ret.NewRow();
  foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
  Row[dp.Name] = dp.GetValue(item);
  ret.Rows.Add(Row);
  }
  return ret;
  }

收获园豆:4
無限遐想 | 老鸟四级 |园豆:3740 | 2012-03-21 15:31

这个我早看过了,会出现异常的……

kingboy8808 | 园豆:5 (初学一级) | 2012-03-22 09:26

@夜风冷: 這個 怎麼會呢?其實 這個 就是對IEnumerable<T>的一個擴展,利用反射,生成table,先生成table結構,然後,寫入數據。返回datatale,就是這個思路哦。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-22 09:31

@無限遐想:我实际写在程序里了,会出现异常的

kingboy8808 | 园豆:5 (初学一级) | 2012-03-26 16:32

@夜风冷: 什麽異常呢?其實,就是 通過反射,生成 table哦,然後 就把數據放到datatable里,自己寫 都比較簡單的哦。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-26 16:40

@夜风冷: 代碼如下測試:

建立操作類,擴展類

    public static class DoPersons {
public static DataTable CopyToDataTable<T>(this IEnumerable<T> array)
{
var ret = new DataTable();
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
ret.Columns.Add(dp.Name, dp.PropertyType);
foreach (T item in array)
{
var Row = ret.NewRow();
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
Row[dp.Name] = dp.GetValue(item);
ret.Rows.Add(Row);
}
return ret;
}

2.定義類:

    public class Person {

public string Name { set; get; }
public int Age { set; get; }
}

3.在程序中調用

       static void Main(string[] args)
{
List<Person> lst = new List<Person>();
for (int i = 0; i < 10; i++)
{
lst.Add(new Person { Age=i, Name="gsw"+i.ToString() });
}

DataTable dt = lst.CopyToDataTable<Person>();
}
無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-26 19:57
其他回答(3)
0

反射机制实现,把所有的Linq集合迭代装入Datatable中即可!

收获园豆:2
kaleyroy | 园豆:360 (菜鸟二级) | 2012-03-21 17:26
0
收获园豆:2
az235 | 园豆:8483 (大侠五级) | 2012-03-21 17:41
0

通过.CopyToDataTable()

MSDN参考:http://msdn.microsoft.com/en-us/library/bb386921.aspx

收获园豆:2
dudu | 园豆:30979 (高人七级) | 2012-03-21 22:56

CopyToDataTable()在哪儿

支持(0) 反对(0) kingboy8808 | 园豆:5 (初学一级) | 2012-03-22 09:37

@夜风冷: 要添加System.Data.DataSetExtensions (in System.Data.DataSetExtensions.dll)的引用,并在代码中添加命名空间System.Data

支持(0) 反对(0) dudu | 园豆:30979 (高人七级) | 2012-03-22 09:56
支持(0) 反对(0) dudu | 园豆:30979 (高人七级) | 2012-03-22 10:59

@dudu: 不行哎

支持(0) 反对(0) kingboy8808 | 园豆:5 (初学一级) | 2012-03-26 16:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册