W mojej aplikacji Silverlight próbuję utworzyć połączenie z bazą danych za pomocą LINQ. Najpierw dodaję nową klasę LINQ to SQL i przeciągam do niej tabelę o nazwie „tblPersoon”.
Następnie w moim pliku serwisowym próbuję wykonać następujące zapytanie:
[OperationContract]
public tblPersoon GetPersoonByID(string id)
{
var query = (from p in tblPersoon where p.id == id select p).Single();
Ale w tblPersoon daje mi następujący błąd.
Nie można znaleźć implementacji wzorca zapytania dla typu źródła „SilverlightApplication1.Web.tblPersoon”. Nie znaleziono „Gdzie”.
A nawet gdy próbuję wykonać następujące czynności:
var query = (from p in tblPersoon select p).Single();
Wyświetla mi się błąd z informacją, że „Wybierz” nie znaleziono!
Kod wygenerowanej klasy dla mojej tabeli można znaleźć tutaj: http://pastebin.com/edx3XRhi
Co jest tego przyczyną i jak mógłbym to rozwiązać?
Dziękuję Ci.
public System.Data.Linq.Table<tblPersoon> tblPersoons { get { return this.GetTable<tblPersoon>(); } }
A kiedy używam: var query = (from p in tblPersoon.Cast <Person> () select p) .Single (); Daje mi następujące błędy na .Cast. „SilverlightApplication1.Web.tblPersoon” nie zawiera definicji „Cast”tblPersoons
(zwróć uwagę na s na końcu), podczas gdy typ totblPersoon
. Zapytanie o typ zamiast właściwości typu.var query = (from p in tblPersoons select p).Single();
to mówi mi, że tblPersoons nawet nie istnieje.Może być konieczne dodanie
using
oświadczenia do pliku. Domyślny szablon klasy Silverlight go nie obejmuje:using System.Linq;
źródło
Upewnij się, że uwzględniono te odniesienia:
Następnie dodaj instrukcję using
using System.Linq;
źródło
Miałem podobny problem z wygenerowanymi silnie wpisanymi zestawami danych, pełny komunikat o błędzie brzmiał:
Z mojego kodu:
var x = from row in ds.InvcHead where row.Company == Session.CompanyID select row;
Zrobiłem więc zgodnie z sugestią i wyraźnie określiłem typ:
var x = from MyApp.InvcHeadRow row in ds.InvcHead where row.Company == Session.CompanyID select row;
Co zadziałało świetnie.
źródło
Brakuje Ci równości:
var query = (from p in tblPersoon where p.id == 5 select p).Single();
where
klauzula musi skutkować wartością logiczną.LUB
where
w ogóle nie powinieneś używać :var query = (from p in tblPersoon select p).Single();
źródło
Miałem ten sam błąd, który opisał w tytule, ale dla mnie był to po prostu instalacja redystrybucyjnego oprogramowania Microsoft Access 12.0 oledb do użytku z LinqToExcel.
źródło
Cześć Najprostszym sposobem na to jest przekształcenie tego IEnumerable do Queryable
Jeśli można zapytać, wykonywanie zapytań staje się łatwe.
Sprawdź ten kod:
var result = (from s in _ctx.ScannedDatas.AsQueryable() where s.Data == scanData select s.Id).FirstOrDefault(); return "Match Found";
Upewnij się, że uwzględniono System.Linq . W ten sposób twój błąd zostanie rozwiązany.
źródło
Dla tych z Was (takich jak ja), którzy zmarnowali zbyt dużo czasu z powodu tego błędu:
Otrzymałem ten sam błąd: „Nie można znaleźć implementacji wzorca zapytania dla typu źródła 'DbSet'”, ale rozwiązaniem dla mnie było naprawienie błędu na poziomie DbContext.
Kiedy tworzyłem swój kontekst, miałem to:
public class ContactContext : DbContext { public ContactContext() : base() { } public DbSet Contacts { get; set; } }
A moje repozytorium (śledziłem wzorzec repozytorium w przewodniku ASP.NET) wyglądało tak:
public Contact FindById(int id) { var contact = from c in _db.Contacts where c.Id == id select c; return contact; }
Mój problem pochodzi z początkowej konfiguracji mojego DbContext, kiedy użyłem DbSet jako ogólnego zamiast typu.
Zmieniłem
public DbSet Contacts { get; set; }
napublic DbSet<Contact> Contacts { get; set; }
i nagle zapytanie zostało rozpoznane.Prawdopodobnie tak mówi km w swojej odpowiedzi, ale skoro wspomniał,
IEnumerable<t>
a nieDbSet<<YourDomainObject>>
, musiałem grzebać w kodzie przez kilka godzin, aby znaleźć linię, która spowodowała ten ból głowy.źródło
Miałem ten sam błąd, ale dla mnie przypisywano go posiadaniu bazy danych i tabeli, które miały takie same nazwy. Kiedy dodałem obiekt ADO .NET Entity do mojego projektu, błędnie wygenerowałem to, co chciałem w pliku kontekstu mojej bazy danych:
// Table public virtual DbSet<OBJ> OBJs { get; set; }
co powinno być:
public virtual DbSet<OBJ> OBJ { get; set; }
I
// Database? public object OBJ { get; internal set; }
którego tak naprawdę nie potrzebowałem, więc skomentowałem to.
Próbowałem wciągnąć swój stół w ten sposób, w moim kontrolerze, kiedy otrzymałem błąd:
protected Model1 db = new Model1(); public ActionResult Index() { var obj = from p in db.OBJ orderby p.OBJ_ID descending select p; return View(obj); }
Poprawiłem kontekst mojej bazy danych i po tym wszystko było w porządku.
źródło