Заполните DataSet, используя Context - Entity Framework 4 - PullRequest
2 голосов
/ 07 января 2011

У меня есть некоторые данные, возвращаемые из контекста. Данные извлекаются spCmsCategoriesReadHierarchy.

Мне нужно взять все данные из контекста и заполнить мой набор данных. Моя конечная цель - заполнить элемент управления TreeView объектом DataSet.

Есть идеи? Спасибо за ваше время и терпение.

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))
    {
    }
}

Ответы [ 2 ]

5 голосов
/ 07 января 2011

Конечно, вы можете вручную скопировать данные из объекта в строку данных в наборе данных.

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);
}

Если вы не хотите явно копировать свойства в строку данных, вы можететакже используйте отражение, чтобы сделать копирование.

0 голосов
/ 07 апреля 2017

Этот метод преобразует список объектов в таблицу данных.Это было дано как ответ на этот вопрос.

/// <summary>
/// Create data table from list.
/// https://stackoverflow.com/questions/18746064/using-reflection-to-create-a-datatable-from-a-class
/// </summary>
public static DataTable CreateDataTable<T>(IEnumerable<T> 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...