¿Cómo expones una consulta LINQ como un servicio web ASMX? Por lo general, desde el nivel empresarial, puedo devolver un tipo DataSet
o DataTable
que se puede serializar para el transporte a través de ASMX.
¿Cómo puedo hacer lo mismo para una consulta LINQ? ¿Hay alguna manera de completar una consulta escrita DataSet
o DataTable
mediante 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;
}
¿Cómo puedo obtener el conjunto de resultados de una consulta LINQ en un DataSet
o DataTable
? Alternativamente, ¿la consulta LINQ es serializable para que pueda exponerla como un servicio web ASMX?
c#
linq
web-services
.net-3.5
Geoff Dalgas
fuente
fuente
Para realizar esta consulta en una
DataContext
clase, deberá hacer lo siguiente:Sin el
as IEnumerable<DataRow>;
, verá el siguiente error de compilación:fuente
Haga un conjunto de objetos de transferencia de datos, un par de mapeadores y devuélvalos a través de .asmx.
Usted debe nunca se exponen los objetos de base de datos directamente, como un cambio en el esquema de procedimiento se propagará al consumidor de servicios web sin que se dé cuenta.
fuente
Si utiliza un tipo de retorno de
IEnumerable
, puede devolver su variable de consulta directamente.fuente
Cree un objeto de clase y devuelva una
list(T)
de la consulta.fuente
Si lo utiliza
IEnumerable
como tipo de retorno, devolverá su variable de consulta directamente.fuente
En aras de la exhaustividad, estas soluciones no funcionan para EF Core (al menos no para EF Core 2.2). El envío a
IEnumerable<DataRow>
, como se sugiere en las otras respuestas aquí, falla. La implementación de esta clase y métodos de extensión funcionó para mí https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow .Por qué no está integrado en EF Core, no tengo idea.
fuente