Вставить результаты запроса LINQ в таблицу данных - PullRequest
1 голос
/ 28 января 2020

Я использую LINQ Query для получения данных из связанных таблиц Entity Framework. Как взять переменную, в которой хранятся результаты, и создать DataTable?

В приведенном ниже коде, как я могу создать DataTable для всех результатов, которые содержит переменная empInfo?

var empInfo = (from import in db.HmspreadsheetImports
join hpp in db.Hppings on import.VText equals hpp.HAu
where import.importDT >= DateTIme.Parse(currDate)
select new Label {
    LastName = hpp.lastname,
    FirstName = hpp.firstname,
    Address1 = hpp.Address1,
    City = import.city,
    State = import.state
}).ToList();

Ответы [ 2 ]

1 голос
/ 28 января 2020

Вы можете использовать этот метод расширения для преобразования IList в DataTable:

public static DataTable ToDataTable<T>(this IList<T> data)
{
    PropertyDescriptorCollection props =
        TypeDescriptor.GetProperties(typeof(T));
    DataTable table = new DataTable("Results");
    for (int i = 0; i < props.Count; i++)
    {
        PropertyDescriptor prop = props[i];
        table.Columns.Add(prop.Name,  Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
    }
    object[] values = new object[props.Count];
    foreach (T item in data)
    {
        for (int i = 0; i < values.Length; i++)
        {
            values[i] = props[i].GetValue(item);
        }
        table.Rows.Add(values);
    }
    return table;
}

Тогда реализация будет выглядеть так:

DataTable dtempInfo = empInfo.ToDataTable<Label>();
0 голосов
/ 28 января 2020

MoreLINQ доступно через пакет NuGet и предоставляет метод расширения ToDataTable , который:

Добавляет элементы в последовательности как строки данного (или нового) объекта (DataTable) с набором лямбда-выражений, определяющих, какие члены (свойство или поле) каждого элемента в последовательности будут предоставлять значения столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...