2011-04-14 84 views
0

此代碼看起來應該起作用,實際上它編譯並運行。但是,cmd.ExecuetReader()(以及有記錄)的記錄未按預期添加到dt。任何人都可以看到可能丟失的東西沒有記錄添加到Linq中的DataTable從DbCommand.ExecuteReader中選擇

DataTable dt = new DataTable(); 
cmd.Connection.Open(); 
cmd.ExecuteReader().Cast<DbDataRecord>().Cast<DataRow>().Select(r=>dt.Rows.Add(r.ItemArray)); 

或者說,有沒有這樣做,當然是使用LINQ :)

回答

0

的LINQ是懶惰的一種更直接的方式。它只是在您實際訪問數據時纔會執行。

這可能會實現:

cmd.Connection.Open(); 
var data = cmd.ExecuteReader().Cast<DbDataRecord>().Cast<DataRow>().Select(r=>r.ItemArray).ToList(); 

DataTable dt = new DataTable(); 

foreach(var d in data) 
    dt.Rows.Add(d); 

調用ToList()力量LINQ執行

+0

感謝。其實剛剛發現這個演員:Cast ()。演員()在運行時拋出一個異常。所以這不起作用。需要另一種方法。但是當linq應該能夠做到這一點時,我討厭做讀者的愚蠢迭代。 – user259286 2011-04-14 03:37:44

+0

下面是答案,非linq答案。 DataTable dt = new DataTable(); cmd.Connection.Open(); var x = cmd.ExecuteReader(); dt.Load(x,LoadOption.OverwriteChanges); – user259286 2011-04-14 03:52:58

+0

好。我正在研究一種將行集合添加到DataTable的方式,因爲我對它們不是很友好。他們通常導致糟糕的OO設計。 – Andre 2011-04-14 04:01:09