2008-10-11 26 views
9

Tengo una página ASP.Net usando ADO para consultar la base de datos de acceso MS y como ejercicio de aprendizaje me gustaría incorporar LINQ. Tengo una tabla simple llamada Quotes.LINQ asp.net página contra MS Access.

Los campos son: QuoteID, QuoteDescription, QuoteAuthor, QuoteDate. Me gustaría ejecutar consultas simples como, "Dame todas las comillas después de 1995".

¿cómo iba a incorporar LINQ en este sitio ASP.Net (C#)

Básicamente, mi pregunta es Cómo funciona LINQ para MS Access ??

+0

Ver mi respuesta aquí https://stackoverflow.com/questions/295772/query-microsoft-access-mdb-database- using-linq-and-c-sharp/46945250 # 46945250, usando VB.net en Windows Forms –

Respuesta

18

LINQ to SQL no admite Access (es decir, no hay un proveedor de acceso/Jet para LINQ), pero puede consultar un DataSet con LINQ. Esto significa que usted llena su DataSet con cualquier información posible de su base de datos que pueda necesitar en sus resultados, y luego filtra por el lado del cliente. Después de tener un conjunto de datos con tipo, y llenarte() con un TableAdapter, que hacer algo como esto:

var year = 1995; // you can pass the year into a method so you can filter on any year 
var results = from row in dsQuotes 
       where row.QuoteDate > year 
       select row; 

Vas a tener que decidir si esto vale la pena. Tendrías que completar tu DataSet con todas las cotizaciones, luego usar LINQ para filtrar solo aquellas citas posteriores a 1995. Para una pequeña cantidad de datos, claro, ¿por qué no? Pero para una gran cantidad de datos, deberá asegurarse de que no sean demasiado lentos.

Sin embargo, si usa un DataSet, puede escribir consultas personalizadas que se conviertan en nuevos métodos TableAdapter. De modo que puede colocar el SQL correcto para su consulta en un método FillByYear() en su TableAdapter y usarlo para llenar su DataTable con tipeo. De esta forma, solo obtendrá los datos que necesita.

Si sigue esta ruta, recuerde que Access/Jet usa parámetros posicionales, parámetros no nombrados. Así que en lugar de

SELECT * FROM Quotes WHERE Year(QuoteDate) > @Year 

que tendría que utilizar algo como esto:

SELECT * FROM Quotes WHERE Year(QuoteDate) > ? 
4

No piensa LINQ to SQL compatible con Access. Sin embargo, si su tabla es lo suficientemente pequeña como para caber en la memoria, LINQ to DataSet le permitirá consultar tablas de datos, etc. con bastante facilidad, especialmente conjuntos de datos fuertemente tipados.

+0

puede explicar a qué se refiere con LINQ to DataSet. ahora en mi consulta consulto a una datatable – leora

+0

LINQ to DataSet es básicamente un conjunto de métodos de extensión en DataSet y DataTable. La idea es poder realizar consultas contra los datos que ya ha obtenido de la base de datos. Consulte http://www.danielmoth.com/Blog/2007/07/linq-to-dataset.html para obtener más información. –

+0

Todos ustedes no quieren decir "Acceso", quiere decir JET. –