使用Context – Entity Framework 4填充DataSet

我有一些从Context返回的数据。 数据已由spCmsCategoriesReadHierarchy

需要从Context中获取所有数据并填充我的DataSet。 我的最终目标是使用DataSet对象填充TreeView控件。

有任何想法吗? 感谢您的时间和耐心。

 using (TestHierarchyEntities context = new TestHierarchyEntities()) { int n = 0; Int16 sl = 1; ObjectParameter nn = new ObjectParameter("nn", typeof(int)); // Create a Data Set where adding the result of context DataSet dataSet = new DataSet("myDataSet"); foreach (CmsCategory categories in context.spCmsCategoriesReadHierarchy(n,sl,nn)) { } } 

当然,您可以手动将数据从对象复制到数据集中的数据行。

 DataSet dataSet = new DataSet("myDataSet"); dataSet.Tables.Add(new DataTable()); //Setup the table columns. foreach (CmsCategory categories in context.spCmsCategoriesReadHierarchy(n,sl,nn)) { DataRow row = dataSet.Tables[0].NewRow(); row["A"] = categories.A; row["B"] = categories.B; dataSet.Tables[0].Rows.Add(row); } 

如果您不希望将属性显式复制到数据行,则还可以使用reflection进行复制。

此方法将对象列表转换为数据表。 它是作为这个问题的答案给出的。

 ///  /// Create data table from list. /// https://stackoverflow.com/questions/18746064/using-reflection-to-create-a-datatable-from-a-class ///  public static DataTable CreateDataTable(IEnumerable list) { Type type = typeof(T); var properties = type.GetProperties(); DataTable dataTable = new DataTable(); foreach (PropertyInfo info in properties) { dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType)); } foreach (T entity in list) { object[] values = new object[properties.Length]; for (int i = 0; i < properties.Length; i++) { values[i] = properties[i].GetValue(entity); } dataTable.Rows.Add(values); } return dataTable; }