完美解决方案,可排除DATASET不支持System.Nullable错误

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using YTO.WeiXin.Model;
using System.Collections;

namespace YTO.WeiXin.Core
{
    public class ListToDataTable
    {
        public static DataTable ToDataTable<T>(IList<T> list)
        {
            return ToDataTable(list, null);
        }

        //将list转换成DataTable
        public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
        {
            List<string> propertyNameList = new List<string>();
            if (propertyName != null)
            {
                propertyNameList.AddRange(propertyName);
            }
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    if (propertyNameList.Count == 0)
                    {
                        //if (DBNull.Value.Equals(pi.PropertyType))
                        //{
                        //   // pi.PropertyType = DateTime;
                        //}
                        Type colType = pi.PropertyType;
                        if (colType.IsGenericType && colType.GetGenericTypeDefinition() == typeof(Nullable<>))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }
                        result.Columns.Add(pi.Name,colType);
                        //result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                    else
                    {
                        if (propertyNameList.Contains(pi.Name))
                        {
                            result.Columns.Add(pi.Name, pi.PropertyType);
                        }
                    }
                }
                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (propertyNameList.Count == 0)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        else
                        {
                            if (propertyNameList.Contains(pi.Name))
                            {
                                object obj = pi.GetValue(list[i], null);
                                tempList.Add(obj);
                            }
                        }
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }
时间: 2024-10-29 00:18:52

完美解决方案,可排除DATASET不支持System.Nullable错误的相关文章

使用sqlbulkcopy报错:1 DataSet 不支持 System.Nullable&lt;&gt;,2.来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。

第一个问题, 解决方法:dt.addcolunms("名字","类型"),类型不能为typeof( int?),typeof(datetime?)等可空值类型.字符串可以.所以可空值类型改成不可空即可. 第二问题, 解决方法: bulkCopy.WriteToServer(dt);先检查dt的列类型是不是不对?,如果没问题,再检查这个dt的列的顺序和数据库列的顺序保持一致. 本人遇到这两个问题就这样解决了.有朋友可能会说,我datatable的列名不就是字段名吗,为

EF实体查询出的数据List&lt;T&gt;转DataTable出现【DataSet 不支持 System.Nullable&lt;&gt;】的问题

public static DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate<T> fn) { DataTable dtReturn = new DataTable(); // column names PropertyInfo[] oProps = null; // Could add a check to verify that there is an element 0

VC、IE、ASP环境下打印、预备的完美解决方案

一种基于XML的报表开发工具,它支持从设计报表,调用API打印.预览,能支持分布式报表.方便报表的存储.转发.在报表中能嵌入VBScript,能方便地访问VB,VC的变量,能访问COM组件.ADO等遵循ActiveX标准的控件. 包括报表可视化开发界面.报表语法解释器,基于COM的组件.是分布式报表的完美解决方案 语法如下: <?xml version="1.0" encoding="GB2312" ?> <!DOCTYPE report SYST

Java与C#间json日期格式互转完美解决方案

http://blog.csdn.net/wilsonke/article/details/24362851 作用一种简单方便的数据传输方案,JSON已经成为替代XML的事实标准.然而在JSON中,时间(DateTime,Timestamp,Date等)格式一直没有很好地统一,当需要跨平台序列化/反序列化时,遇到不少麻烦.作者经过反复尝试,解决了C#与Java通过JSON进行时间传输的困难.C#解析Java/Javascript生成的JSON并不困难,但Java解析C#生成的JSON困难重重.下

No resource found that matches the given name &#39;Theme.AppCompat.Light 的完美解决方案

No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案 首先这个问题的产生是由于缺少Theme.AppCompat.Light这个主题产生的,而这个主题 的是存在于android\support\appcompat-v7支持库中的,注意不是jar包. No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方

Mysql中文乱码问题完美解决方案

MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如php)的连线语系设定问题强烈建议使用utf8!!!!utf8可以兼容世界上所有字符!!!!一.避免创建数据库及表出现中文乱码和查看编码方法1.创建数据库的时候:CREATE DATABASE `test`CHARACTER SET 'utf8'COLLATE 'utf8_general_ci';2.建表

关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)(转)

这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧 最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅. 首先: 用show variables like "%colla%":show varables like "%char%":这两条命令查看数据库与服务端的字符集

iOS5 切换中文键盘时覆盖输入框的完美解决方案

iOS5 切换中文键盘时覆盖输入框的完美解决方案 原文:http://wangsheng2008love.blog.163.com/blog/static/782016892012631102714562/ 2012-07-31 22:42:43|  分类: iOS |  标签:ios5  中文键盘  遮盖  输入框  |举报|字号 订阅 众所周知,iOS5之前,iPhone上的键盘的高度是固定为216.0px高的,中文汉字的选择框是悬浮的,所以不少应用都将此高度来标注键盘的高度(包括米聊也是这

Xcode6.1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。

http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加xib和图片.完美解决方案. 在cocoachina呆挺长时间了.没什么大贡献.就整理了这个,希望对大家有帮助.绝对原创.呵呵. 1.创建一个工程,或者在原有的工程上进行.不在列举.2.在原有工程上添加一个静态库 2.1.选择OS X 的Bundle.因为Xcode6.1中iOS里没有Bundle.