Дополнительно
Заполнение DataSet или DataTable из набора результатов LINQ-запроса
Как представить LINQ-запрос в виде веб-сервиса ASMX? Обычно с бизнес-уровня я могу вернуть типизированный DataSet
или DataTable
, который может быть сериализован для передачи через ASMX.
Как я могу сделать то же самое для LINQ-запроса? Есть ли способ заполнить типизированный DataSet
или DataTable
с помощью LINQ-запроса?
public static MyDataTable CallMySproc()
{
string conn = "...";
MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
MyDataTable dt = new MyDataTable();
// execute a sproc via LINQ
var query = from dr
in db.MySproc().AsEnumerable
select dr;
// copy LINQ query resultset into a DataTable -this does not work !
dt = query.CopyToDataTable();
return dt;
}
Как я могу получить набор результатов LINQ-запроса в DataSet
или DataTable
? Или же, можно ли сериализовать LINQ-запрос, чтобы я мог представить его в виде веб-службы ASMX?
129
7
Как упоминалось в вопросе, у
IEnumerable
есть методCopyToDataTable
:Почему это не сработает для вас?
Выполнить этот вопрос против класса 'DataContext', you' ll должен сделать следующее:
Без 'как IEnumerable< DataRow>'; Вы будете видеть следующую ошибку компиляции:
Сделайте ряд Объектов Передачи данных, нескольких картопостроителей и возвращения это через .asmx.
Вы должны никогда, выставляют объекты базы данных непосредственно, поскольку изменение в схеме процедуры размножится потребителю веб-сервиса без Вас замечающий его.
Если вы используете тип возврата
IEnumerable
, вы можете возвращать вашу переменную query напрямую.Создайте объект класса и верните
list(T)
запроса.Если Вы используете тип возвращения 'IEnumerable '.It, помогает возвратить Вашу переменную вопроса непосредственно.
Ради полноты эти решения не работают на Ядро EF (по крайней мере, не для Основных 2.2 EF). Кастинг к 'IEnumerable< DataRow>'; как предложено в других ответах здесь, терпит неудачу. Осуществление этого класса и дополнительных методов работало на меня https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow.
Почему it' s не встроенный в Ядро EF, у меня нет идеи.