Priya-Kiko Ответов: 1

Получение строк по условию из сущности dbcontext в datatable с помощью LINQ


Привет,

Я новичок в LINQ и Entity Framework

Iam использует подход к базе данных в Entity Framework 6.0 и этот код c# для извлечения всех записей с совпадающей датой или совпадением имени входа в другую таблицу данных.

var obj = oContext.systevents.Where(r => r.date == Convert.ToDateTime(mdate));

or 

var obj = oContext.systevents.Where(r => r.login == "sara");


Я ожидаю, что выходные данные будут представлены в виде набора совпадающих строк в таблице данных. Моя проблема заключается в том, что я не могу копировать, пожалуйста, направьте меня на это.

Заранее спасибо.

Что я уже пробовал:

пробовал и это тоже..

var obj = oContext.systevents.AsEnumerable().Select(r => r.login == "sara")


Разыскиваемый... но не нашел подходящей ссылки.

Maciej Los

Вы должны знать, что структура DateTime возвращает части даты и времени. Таким образом, есть минимальный шанс получить точное совпадение. Я думаю, вам следует удалить часть времени или создать оператор where на основе даты и времени между 00:00.00 - 23:59.59.

Priya-Kiko

Спасибо, я понимаю, это не с датой времени или каким-либо условием, это просто я не могу использовать расширение CopyToDataTable.

1 Ответов

Рейтинг:
12

Maciej Los

Попробуйте использовать объект DataTable.Метод LoadDataRow (System.Data) | Microsoft Docs[^] вместе с DataTableExtensions.Метод CopyToDataTable (System.Data) | Microsoft Docs[^]. Примечание: сначала вы должны создать желаемую таблицу данных!

DataTable destdt = new DataTable();
destdt.Columns.AddRange(new DataColumn[]
    {
        new DataColumn("Field1", typeof(int)),
        new DataColumn("Field2", typeof(string)),
        ...
        new DataColumn("FieldN", typeof(string)),
    });

destdt = oContext.systevents.AsEnumerable()
    .Where(r => r.login == "sara")
    .Select(x => destdt.LoadDataRow(new object[]
    {
        x.Field1, 
        x.Field2,
        ...
        x.FieldN
    }, false)
    .CopyToDataTable();


Для получения более подробной информации, пожалуйста, смотрите:
Как реализовать CopyToDataTable<T>, где универсальный тип T не является DataRow | Microsoft Docs[^]


Priya-Kiko

Спасибо.

Maciej Los

Всегда пожалуйста.