Как вы представляете запрос 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?
c#
linq
web-services
.net-3.5
Джефф Далгас
источник
источник
Чтобы выполнить этот запрос к
DataContext
классу, вам нужно сделать следующее:Без этого
as IEnumerable<DataRow>;
вы увидите следующую ошибку компиляции:источник
Создайте набор объектов переноса данных, пару картографов и верните их через .asmx.
Вы никогда не должны предоставлять объекты базы данных напрямую, так как изменение схемы процедуры будет распространяться на потребителя веб-службы без вашего ведома.
источник
Если вы используете тип возврата
IEnumerable
, вы можете вернуть свою переменную запроса напрямую.источник
Создайте объект класса и верните
list(T)
запрос.источник
Если вы используете
IEnumerable
в качестве возвращаемого типа, он вернет вашу переменную запроса напрямую.источник
Для полноты картины эти решения не работают для EF Core (по крайней мере, для EF Core 2.2). Приведение к
IEnumerable<DataRow>
, как это предлагается в других ответах здесь, не удается. Реализация этого класса и методов расширения работала для меня https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow .Почему это не встроено в EF Core, я понятия не имею.
источник