Como você expõe uma consulta LINQ como um serviço da Web ASMX? Normalmente, na camada de negócios, posso retornar um tipo digitado DataSet
ou DataTable
que pode ser serializado para transporte no ASMX.
Como posso fazer o mesmo para uma consulta LINQ? Existe uma maneira de preencher uma consulta digitada DataSet
ou DataTable
via 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;
}
Como posso obter o conjunto de resultados de uma consulta LINQ em um DataSet
ou DataTable
? Como alternativa, a consulta LINQ é serializável para que eu possa expô-la como um serviço da Web ASMX?
c#
linq
web-services
.net-3.5
Geoff Dalgas
fonte
fonte
Para executar essa consulta em uma
DataContext
classe, faça o seguinte:Sem o arquivo,
as IEnumerable<DataRow>;
você verá o seguinte erro de compilação:fonte
Faça um conjunto de objetos de transferência de dados, alguns mapeadores e retorne-o por meio do .asmx.
Você nunca deve expor os objetos de banco de dados diretamente, pois uma mudança no esquema do procedimento será propagada para o consumidor de serviços da Web sem que você perceba.
fonte
Se você usar um tipo de retorno
IEnumerable
, poderá retornar sua variável de consulta diretamente.fonte
Crie um objeto de classe e retorne um
list(T)
da consulta.fonte
Se você usar
IEnumerable
como o tipo de retorno, ele retornará sua variável de consulta diretamente.fonte
Por uma questão de integridade, essas soluções não funcionam para o EF Core (pelo menos não para o EF Core 2.2). A conversão para
IEnumerable<DataRow>
, conforme sugerido nas outras respostas aqui, falha. A implementação desses métodos de classe e extensão funcionou para mim https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow .Por que não está embutido no EF Core, não faço ideia.
fonte