Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Gerar registros de banco de dados de retorno usando LinqToSql?


No caso de executar uma consulta básica, pode funciona dessa maneira (certamente é possível) - no entanto, no caso de consultar um Table<T> nu , pode seja que todos os buffers primeiro; talvez você possa tentar consultar a contagem durante a iteração ou executar um rastreamento. Neste caso eu suspeito ele irá armazenar em buffer primeiro.

Re fechado:isso também depende;p Se alguém estiver usando foreach , então sim:desde foreach descarta explicitamente o iterador via finally . No entanto! Não é garantido se alguém fizer, por exemplo (muito travesso e negligente):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
    Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad

então, como o iterador não a:é descartado, b:se esgota e c:não trava, ele não será desligado corretamente (qualquer uma dessas 3 condições irá fechá-lo corretamente). Ênfase:este é um caso patológico:normalmente é razoavelmente seguro dizer "vai fechar, sim".

Se você deseja não buffering garantido, observe que "dapper" tem isso, se você definir buffered para false :
IEnumerable<Customer> customers = connection.Query<Customer>(
       "select * from Customer", buffered: false);

(também pode lidar com os parâmetros etc)