2008-10-11 15 views
9

Mam stronę ASP.Net przy użyciu ADO do kwerendy MS bazy danych i jako ćwiczenie uczenia się chciałbym włączyć LINQ. Mam jedną prostą tabelkę o nazwie Cytaty.Strona asp.net LINQ przeciwko MS Access.

Dostępne są następujące pola: QuoteID, QuoteDescription, QuoteAuthor, QuoteDate. Chciałbym uruchomić proste zapytania, takie jak "Daj mi wszystkie cytaty po 1995 roku".

jak bym włączyć LINQ do tej strony ASP.NET (C#)

Zasadniczo moje pytanie brzmi czy LINQ praca dla MS Access ??

+0

Zobacz moją odpowiedź tutaj https://stackoverflow.com/questions/295772/query-microsoft-access-mdb-database- używając-linq-and-c-sharp/46945250 # 46945250, używając VB.net na Windows Forms –

Odpowiedz

18

LINQ do SQL nie obsługuje Access (to znaczy, że nie ma dostawcy Access/Jet dla LINQ), ale można zapytać o zestaw DataSet za pomocą LINQ. Oznacza to, że wypełniasz DataSet wszystkimi możliwymi danymi z bazy danych, które mogą być potrzebne w wynikach, a następnie filtrujesz po stronie klienta. Po masz wpisany DataSet, a Fill() to z TableAdapter, można zrobić coś takiego:

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; 

będziesz musiał zdecydować, czy to jest warte. Będziesz musiał wypełnić swój zestaw danych za pomocą wszystkich cytatów, a następnie użyć LINQ do filtrowania tylko tych cytatów, które są po 1995 roku. Na niewielką ilość danych, na pewno, dlaczego nie? Ale w przypadku bardzo dużej ilości danych musisz się upewnić, że nie będzie zbyt wolny.

Jeśli używasz DataSet, możesz pisać niestandardowe zapytania, które stają się nowymi metodami TableAdapter. Możesz więc umieścić poprawny kod SQL dla swojego zapytania w metodzie FillByYear() w swoim TableAdapter i użyć go do wypełnienia wpisanej DataTable. W ten sposób odzyskasz tylko te dane, których potrzebujesz.

Jeśli wybierzesz tę trasę, pamiętaj, że Access/Jet używa parametrów pozycyjnych, nie nazwanych parametrów Więc zamiast

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

chcesz użyć czegoś takiego:

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

Ja nie myśl LINQ do SQL obsługuje dostęp. Jednakże, jeśli twoja tabela jest wystarczająco mała, aby zmieścić się w pamięci, LINQ do DataSet pozwoli ci dość łatwo odpytywać datatables etc - szczególnie mocno wpisane zestawy danych.

+0

możesz wyjaśnić, co masz na myśli przez LINQ do DataSet. teraz w moim zapytaniu i zapytanie do datatable – leora

+0

LINQ do DataSet jest w zasadzie zbiorem metod rozszerzenia na DataSet i DataTable. Chodzi o to, aby móc wykonywać kwerendy przeciwko danym już pobranym z bazy danych. Więcej informacji można znaleźć na stronie http://www.danielmoth.com/Blog/2007/07/linq-to-dataset.html. –

+0

Y'all nie znaczy "Dostęp" - masz na myśli JET. –