2008-10-11 6 views
9

Ich habe eine ASP.Net-Seite mit ADO, um MS Access-Datenbank abzufragen, und als eine Lernübung möchte ich LINQ integrieren. Ich habe eine einfache Tabelle namens Quotes.LINQ asp.net Seite gegen MS Access.

Die Felder sind: QuoteID, QuoteDescription, QuoteAuthor, QuoteDate. Ich würde gerne einfache Abfragen wie "Gib mir alle Zitate nach 1995" ausführen.

Wie würde ich LINQ in diese ASP.Net Website integrieren (C#)

Grundsätzlich meine Frage ist, tut LINQ Arbeit für MS Access ??

+0

Siehe meine Antwort hier https://stackoverflow.com/questions/295772/query-microsoft-access-mdb-database- using-linq-and-c-sharp/46945250 # 46945250, mit VB.net auf Windows Forms –

Antwort

18

LINQ to SQL unterstützt nicht Access (dh es gibt keinen Access/Jet-Provider für LINQ), aber Sie können ein DataSet mit LINQ abfragen. Das heißt, Sie füllen Ihr DataSet mit allen möglichen Daten aus Ihrer Datenbank, die Sie möglicherweise in Ihren Ergebnissen benötigen, und filtern dann auf der Client-Seite. Nachdem Sie eine typisierte DataSet, und Sie Fill() mit einem Tableadapter, tun Sie etwas wie folgt aus:

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; 

Sie müssen entscheiden, ob dies ist es wert. Sie müssten Ihr DataSet mit alle die Anführungszeichen füllen, dann verwenden Sie LINQ, um nur die Angebote zu filtern, die nach 1995 sind. Für eine kleine Menge von Daten, sicher, warum nicht? Aber für eine sehr große Menge an Daten müssen Sie sicherstellen, dass es nicht zu langsam ist.

Wenn Sie jedoch ein DataSet verwenden, können Sie benutzerdefinierte Abfragen schreiben, die zu neuen TableAdapter-Methoden werden. So können Sie das richtige SQL für Ihre Abfrage in eine FillByYear() -Methode in Ihrem TableAdapter einfügen und diese verwenden, um Ihre typisierte DataTable zu füllen. Auf diese Weise erhalten Sie nur die Daten, die Sie benötigen.

Wenn Sie diesen Weg gehen, denken Sie daran, dass Access/Jet Positionsparameter, nicht benannte Parameter verwendet. Anstatt also

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

würden Sie so etwas wie folgt verwenden:

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

Ich nicht denke LINQ to SQL unterstützt Access. Wenn Ihre Tabelle jedoch klein genug ist, um in den Speicher zu passen, können Sie mit LINQ to DataSet Datatabellen usw. recht einfach abfragen - insbesondere stark typisierte Datasets.

+0

können Sie erklären, was Sie mit LINQ zu DataSet meinen. gerade jetzt in meiner Abfrage, die ich zu einer Datentabelle abfragen – leora

+0

LINQ to DataSet ist im Grunde eine Reihe von Erweiterungsmethoden auf DataSet und DataTable. Die Idee besteht darin, Abfragen für Daten ausführen zu können, die Sie bereits aus der Datenbank abgerufen haben. Weitere Informationen finden Sie unter http://www.danielmoth.com/Blog/2007/07/linq-to-dataset.html. –

+0

Sie meinen nicht "Access" - Sie meinen JET. –