2008-10-11 9 views
9

J'ai une page ASP.Net en utilisant ADO pour interroger MS base de données d'accès et comme un exercice d'apprentissage que je voudrais intégrer LINQ. J'ai une table simple appelée Quotes.page LINQ asp.net contre MS Access.

Les champs sont: QuoteID, QuoteDescription, QuoteAuthor, QuoteDate. Je voudrais lancer des requêtes simples comme, "Donnez-moi toutes les citations après 1995".

Comment puis-je intégrer LINQ dans ce site ASP.Net (C#)

Au fond, ma question est fonctionne LINQ pour MS Access ??

+0

Voir ma réponse ici https://stackoverflow.com/questions/295772/query-microsoft-access-mdb-database- En utilisant-linq-and-c-sharp/46945250 # 46945250, en utilisant VB.net sur Windows Forms –

Répondre

18

LINQ to SQL ne prend pas en charge Access (c'est-à-dire qu'il n'y a pas de fournisseur Access/Jet pour LINQ), mais vous pouvez interroger un DataSet avec LINQ. Cela signifie que vous remplissez votre DataSet avec toutes les données possibles de votre base de données dont vous pourriez avoir besoin dans vos résultats, puis vous filtrez du côté client. Une fois que vous avez un DataSet typé, et vous remplissez() avec un TableAdapter, vous faire quelque chose comme ceci:

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; 

Vous devez décider si cela vaut la peine. Vous devez remplir votre DataSet avec tous les guillemets, puis utiliser LINQ pour filtrer uniquement les guillemets qui sont après 1995. Pour une petite quantité de données, bien sûr, pourquoi pas? Mais pour une très grande quantité de données, vous devrez vous assurer que cela ne sera pas trop lent.

Si vous utilisez un DataSet, vous pouvez cependant écrire des requêtes personnalisées qui deviennent de nouvelles méthodes TableAdapter. Vous pouvez donc placer le SQL correct pour votre requête dans une méthode FillByYear() dans votre TableAdapter et l'utiliser pour remplir votre DataTable typé. De cette façon, vous récupérez uniquement les données dont vous avez besoin.

Si vous suivez cette route, rappelez-vous qu'Access/Jet utilise des paramètres de position, et non des paramètres nommés. Ainsi, au lieu de

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

vous utiliseriez quelque chose comme ceci:

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

Je ne sais pas penser LINQ to SQL prend en charge l'accès. Cependant, si votre table est suffisamment petite pour tenir dans la mémoire, LINQ to DataSet vous permettra d'interroger facilement les datatables etc - en particulier les datasets fortement typés.

+0

pouvez-vous expliquer ce que vous entendez par LINQ to DataSet. maintenant dans ma requête je demande à un datatable – leora

+0

LINQ à DataSet est essentiellement un ensemble de méthodes d'extension sur DataSet et DataTable. L'idée est d'être capable d'effectuer des requêtes sur les données que vous avez déjà récupérées dans la base de données. Voir http://www.danielmoth.com/Blog/2007/07/linq-to-dataset.html pour plus d'informations. –

+0

Vous ne voulez pas dire "Accès" - vous voulez dire JET. –