none
类型转换求教高手 RRS feed

  • 问题

  • 请问如何从IQueryable转换成table型?是关于LINQ完的数据想保存到一个TABLE中再更改一部份。
    2012年2月23日 8:14

答案

  • Hi hzpemu,

      你可以尝试下面的代码:

     
    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;
       }
    


    orichisonic http://blog.csdn.net/orichisonic If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    2012年2月23日 9:29
  • 請試一下,
    public static DataTable CopyToDataTable<T>(this IEnumerable<T> array)
    {
    	var ret = new DataTable();
    	foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
    	{
    		Type propType = dp.PropertyType;
    		if (propType.IsGenericType &&
    			propType.GetGenericTypeDefinition() == typeof(Nullable<>))
    		{
    			propType = Nullable.GetUnderlyingType(propType);
    		}
    		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;
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 hzpemu 2012年2月28日 0:58
    2012年2月27日 8:05
  • Sorry, 有一行沒有改到!

    ret.Columns.Add(dp.Name, dp.PropertyType);
    =>

    ret.Columns.Add(dp.Name, propType);


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 hzpemu 2012年2月28日 0:58
    2012年2月27日 9:45

全部回复

  • Hi hzpemu,

      你可以尝试下面的代码:

     
    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;
       }
    


    orichisonic http://blog.csdn.net/orichisonic If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    2012年2月23日 9:29
  • 2012年2月23日 9:53
  • 你好!用你的方法会出现这个错误,不知道为什么?
    2012年2月27日 6:14
  • 用乱马客的方法会存在类型转的问题
    2012年2月27日 6:15
  • 請試一下,
    public static DataTable CopyToDataTable<T>(this IEnumerable<T> array)
    {
    	var ret = new DataTable();
    	foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
    	{
    		Type propType = dp.PropertyType;
    		if (propType.IsGenericType &&
    			propType.GetGenericTypeDefinition() == typeof(Nullable<>))
    		{
    			propType = Nullable.GetUnderlyingType(propType);
    		}
    		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;
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 hzpemu 2012年2月28日 0:58
    2012年2月27日 8:05
  • 查詢_超信明細是DataRow嗎? 

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月27日 8:07
  • 查詢_超信明細是selldb里的一个表,selldb是DataClasses1DataContext的来。
    2012年2月27日 8:37
  • 乱马客,你好,跟据你的代码还是有这种提示?

    2012年2月27日 8:52
  • Sorry, 有一行沒有改到!

    ret.Columns.Add(dp.Name, dp.PropertyType);
    =>

    ret.Columns.Add(dp.Name, propType);


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 hzpemu 2012年2月28日 0:58
    2012年2月27日 9:45
  • 现在可以了,谢谢二楼和乱马客!
    2012年2月28日 0:58