1. 程式人生 > >Linq to DataTable 解決DataSet不支援System.nullable

Linq to DataTable 解決DataSet不支援System.nullable

using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Reflection;
using System.Linq;
using System.Xml.Linq;

namespace UserFunction
{
    /// <summary>
    /// Summary description for LinqToDataTable
    /// </summary>
    static public  class LinqToDataTable
    {
        static public  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

            foreach (T rec in varlist)
            {

                // Use reflection to get property names, to create table, Only first time, others will follow

                if (oProps == null)
                {

                    oProps = ((Type)rec.GetType()).GetProperties();

                    foreach (PropertyInfo pi in oProps)
                    {

                        Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {

                            colType = colType.GetGenericArguments()[0];

                        }

                        dtReturn.Columns.Add(new DataColumn(pi.Name, colType));

                    }

                }

                DataRow dr = dtReturn.NewRow(); foreach (PropertyInfo pi in oProps)
                {

                    dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);

                }

                dtReturn.Rows.Add(dr);

            }

            return (dtReturn);

        }

        public delegate object[] CreateRowDelegate<T>(T t);
    }
}

/*
 * sample:
 * var query = from ....;
 * DataTable dt = query.ToDataTable(rec => new object[] { query });
 *
*/

相關推薦

Linq to DataTable 解決DataSet支援System.nullable

using System;using System.Data;using System.Collections;using System.Collections.Generic;using System.Configuration;using System.Reflection;using System.L

解決IE8支援陣列的indexOf方法

解決IE8不支援陣列的indexOf方法 測試報過來一個bootstrap-table.js bug, 在IE8下有個js錯誤,但是在其它瀏覽器下(Firefox, Chrome, IE9)下面都很正常。 後來除錯發現原因是在IE8下, js陣列沒有indexOf方法. 下面是

npm丨解決Windows支援NODE_ENV

  package.json檔案中,下面這樣寫,在WIN裡面,npm start 會報錯。 "start": "NODE_ENV=development webpack-dev-server",   需要安裝下 cross-env 包。 cnpm i c

MySQL複雜查詢 —— 跨表/多表查詢,如何解決MySQL支援全連線的問題 —— 使用結果集的合併

  SELECT  sex,  MAX(salary),  MIN(salary),  AVG(salary)   FROM  emp   GROUP  BY  sex; 5.MySQL複雜查詢 —— 跨表/多表查詢 —— 瞭解 查詢結果集中的資料來自於多個不同的

解決IE支援getElementsClassName的方案

在DOM3裡已經加入了getElementsByClassName這個方法,然而IE9、10以外的其它版本均不支援,這是一塊傷痛啊! 目前可以這麼解決,判斷瀏覽器支不支援這個方法,如果支援就不管;如果不支援,就在document物件里加入getElements

selenium+phantomjs 報錯解決支援phantomjs的解決

執行如下程式 c:\Python37\python.exe d:/Py/crawler/Phantomjs.py 報錯:   c:\Python37\lib\site-packages\selenium\webdriver\phantomjs\webdriver.py:4

解決Chrome支援本地Ajax請求的問題

 在寫一個用傳統實現ajax例子的時候,在chrome中遇到了一個問題:         XMLHttpRequest cannot loadfile:///C:/Users/Administrator/Desktop/test.php.Cross origin req

解決idea支援lombok.jar中註解的問題

先說一下lombok.jar中都有哪些註解@EqualsAndHashCode:實現equals()方法和hashCode()方法 @ToString:實現toString()方法 @Data :註解在

解決 IE 支援 document.getElementsByClassName() 的方法

網頁錯誤詳細資訊 訊息: 物件不支援此屬性或方法 document.getElementsByClassName('element_name') //create method getElementsByClassName for document if(!docume

Selenium Webdriver 的使用java執行js程式碼 解決 ScriptEngine支援瀏覽器內建物件window,document的問題

問題場景: 使用java 掉用js程式碼,發現 ScriptEngine不支援瀏覽器內建物件window,document的問題; 問題一:為什麼要 用java掉用js程式碼?     比如在 抓取(爬取)對方網站時,需要破解一些js邏輯程式碼合作加密演算法,但是js混淆了

用一種無恥的方式解決bootstrapvalidator支援中國id驗證的方法

使用bootstrap開發前端介面的時候,不可避免的要使用到id驗證這個問題,但是萬惡的外國人就是不支援我天朝的身份證號碼驗證方式,所以就想到了一下歪招: 1.在https://github.com/nghuuphuoc/bootstrapvalidator/blame/m

解決IE支援display:inline-block;

對於IE不支援display:inline-block;的解決方法 .triangle-left{ height:0px; width:0px; border:30px so

解決瀏覽器支援indexOf()方法的方案

在IE8版本以下(含IE8)IE瀏覽都不支援陣列的Indexof()方法,在使用indexOf方法前,執行一下下面的js就可以解決。 原理就是如果發現數組沒有indexOf方法,會新增上這個方法。 此解決方案來源於MDN。 indexOf() was add

解決nodejs支援async和await關鍵字的問題

http://blog.csdn.net/brave_coder/article/details/69802881 1、 $ npm install --save-dev babel-cli   2、 $ npm install --save-dev bab

解決IE8 支援getDate

第一,先說需求:後臺返回一個時間,我需要獲取這個時間的後一天時間。再次或許系統時間和後一天時間進行比較,依次做不同業務。 第二,因為要在 後臺時間加一天,我用到了getDate()這個方法,IE8不支

把H2資料庫從jar包部署到Kubernetes,並解決Ingress支援TCP的問題

# 1 前言 > 歡迎訪問[南瓜慢說 www.pkslow.com](https://www.pkslow.com/)獲取更多精彩文章! [`H2 Database`](https://www.h2database.com/html/main.html)是一個優秀的資料庫,又小又方便,支援記憶體和

Linq中欄位資料型別轉換問題(Linq to entity,LINQ to Entities 識別方法"System.String ToString()"問題解決

1、在工作中碰到這樣一個問題: 使用linq時,需要查詢兩個表,在這兩張表中關聯欄位分別是int,和varchar()也就是string,在linq中對這兩個欄位進行關聯, 如果強制型別轉換兩個不同型別的欄位,就會報響應的擴充套件方法無法自動推斷引數型別的問題(比如:我用的

LINQ to Entities 識別方法“System.String get_Item(Int32)”,因此該方法無法轉換為儲存表示式。

1、LINQ to Entities 不識別方法“System.String get_Item(Int32)”,因此該方法無法轉換為儲存表示式。專案中發現linq to entities 不識別? ,為何大家都要腰間盤,你的如此突出。 Expression<Func<

LinQ to entities 能識別方法“system.string.ToString(system.String)”.因此該方法無法轉換為儲存表示式

【我也是剛研究IEnumerable和IQueryable】以下都是個人理解,僅供參考,如有錯誤歡迎指出~ 在EF裡面,使用IQueryable和IEnumerable可以延遲載入。 IQuerybale其實是微軟針對SQLService進行了再度優化的一個產物。使用上基本和IEnumerable類似。

LINQ to DataSet/DataTable

    CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記    一個DataSet通常包含一個或多個DataTable,同時也包括它們之間的關係集合等,實際上可以把它看成是一個縮影的資料庫。LINQ to DataSet也是對一個或多個Data