一小段 EntityReader To DataTable
最近想用EF开发一个支持自定义查询简单工具
发现DataTable.Load() 不能从EntityDataReader读取
于是自己写了一个简单的 关键代码如下
public DataTable ExecuteQuery() { using (EntityConnection econn = new EntityConnection(SystemStatus.connectorStr)) { string esql = @"SELECT p.name,p.posiCode FROM marcoleemisEntities.posis as p"; econn.Open(); using (EntityCommand ecmd = new EntityCommand(esql, econn)) { using (EntityDataReader ereader = ecmd.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SequentialAccess)) { DataTable tempTable = CreateTable(ereader); ReadDataToTable(ereader, tempTable); return tempTable; } } //Console.WriteLine(ecmd.ToTraceString()); } } private static void ReadDataToTable(EntityDataReader ereader, DataTable tempTable) { //DataTable tab = ereader.GetSchemaTable(); while (ereader.Read()) { object[] cells = new object[ereader.FieldCount]; ereader.GetValues(cells); DataRow row = tempTable.NewRow(); row.ItemArray = cells; tempTable.Rows.Add(row); } } private static DataTable CreateTable(EntityDataReader ereader) { DataTable tempTable = new DataTable("QueryData"); for (int i = 0; i < ereader.FieldCount; i++) { tempTable.Columns.Add(ereader.GetName(i), ereader.GetFieldType(i)); } return tempTable; }