In meiner Silverlight-Anwendung versuche ich, eine Datenbankverbindung mit LINQ ..__ herzustellen. Zuerst füge ich eine neue LINQ zur SQL-Klasse hinzu und ziehe meine Tabelle "tblPersoon" in diese.
Dann versuche ich in meiner Servicedatei die folgende Abfrage auszuführen:
[OperationContract]
public tblPersoon GetPersoonByID(string id)
{
var query = (from p in tblPersoon where p.id == id select p).Single();
Bei tblPersoon gibt es jedoch den folgenden Fehler.
Es wurde keine Implementierung des Abfragemusters für Quelltyp .__ gefunden. "SilverlightApplication1.Web.tblPersoon". 'Wo' nicht gefunden.
Und selbst wenn ich folgendes probiere:
var query = (from p in tblPersoon select p).Single();
Es gibt eine Fehlermeldung, dass 'Select' nicht gefunden wurde!
Code für die generierte Klasse für meine Tabelle finden Sie hier: http://Pastebin.com/edx3XRhi
Was verursacht das und wie könnte ich das lösen?
Vielen Dank.
Ist die tblPersoon
-Implementierung IEnumerable<T>
? Möglicherweise müssen Sie es mit folgendem Befehl tun:
var query = (from p in tblPersoon.Cast<Person>() select p).Single();
Diese Art von Fehler (Eine Implementierung des Abfragemusters konnte nicht gefunden werden) tritt normalerweise auf, wenn:
using System.Linq
).IEnumerable<T>
nichtBearbeiten :
Abgesehen von der Tatsache, dass Sie den Typ (tblPersoon
) anstelle der Eigenschaft tblPersoons
abfragen, benötigen Sie auch eine Kontextinstanz (Klasse, die die tblPersoons
-Eigenschaft definiert), beispielsweise
public tblPersoon GetPersoonByID(string id)
{
var context = new DataClasses1DataContext();
var query = context.tblPersoons.Where(p => p.id == id).Single();
// ...
Möglicherweise müssen Sie der Datei eine using
-Anweisung hinzufügen. Die Standardvorlage der Silverlight-Klasse enthält sie nicht:
using System.Linq;
Stellen Sie sicher, dass diese Referenzen enthalten sind:
Fügen Sie dann die using-Anweisung hinzu
using System.Linq;
Ich hatte ein ähnliches Problem mit generierten, stark typisierten Datensätzen. Die vollständige Fehlermeldung war:
Eine Implementierung des Abfragemusters für .__ konnte nicht gefunden werden. Quelltyp 'MyApp.InvcHeadDataTable'. 'Wo' nicht gefunden. Erwägen Sie explizit, den Typ der Bereichsvariablen 'Zeile' anzugeben.
Von meinem Code:
var x =
from row in ds.InvcHead
where row.Company == Session.CompanyID
select row;
Also habe ich den Vorschlag gemacht und den Typ explizit angegeben:
var x =
from MyApp.InvcHeadRow row in ds.InvcHead
where row.Company == Session.CompanyID
select row;
Welches ein Leckerbissen war.
Ihnen fehlt eine Gleichheit:
var query = (from p in tblPersoon where p.id == 5 select p).Single();
where
-Klausel muss einen Boolean ergeben.
ODER Sie sollten where
überhaupt nicht verwenden:
var query = (from p in tblPersoon select p).Single();
Hallo einfachste Möglichkeit, dies zu tun ist, dieses IEnumerable in ein Queryable umzuwandeln
Wenn es abfragbar ist, ist das Ausführen von Abfragen einfach.
Bitte überprüfen Sie diesen Code:
var result = (from s in _ctx.ScannedDatas.AsQueryable()
where s.Data == scanData
select s.Id).FirstOrDefault();
return "Match Found";
Stellen Sie sicher, dass Sie System.Linq ..__ enthalten. Auf diese Weise wird Ihr Fehler behoben.
Ich hatte den gleichen Fehler, aber für mich wurde es der Datenbank und der gleichnamigen Tabelle zugeschrieben. Als ich das .NET-Entitätsobjekt ADO zu meinem Projekt hinzufügte, erzeugte es falsch, was ich in meiner Datenbankkontextdatei wollte:
// Table
public virtual DbSet<OBJ> OBJs { get; set; }
was hätte sein sollen:
public virtual DbSet<OBJ> OBJ { get; set; }
Und
// Database?
public object OBJ { get; internal set; }
was ich eigentlich nicht wirklich brauchte, also kommentierte ich es aus.
Ich habe versucht, meinen Tisch so in meinen Controller zu ziehen, als ich meine Fehlermeldung bekam:
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);
}
Ich habe meinen Datenbankkontext korrigiert und danach war alles in Ordnung.
Ich hatte den gleichen Fehler wie in Titel beschrieben, aber für mich wurde einfach Microsoft Access 12.0 Oledb Redistributable zur Verwendung mit LinqToExcel installiert.
Für diejenigen von Ihnen (wie ich), die durch diesen Fehler zu viel Zeit verschwendet haben:
Ich hatte den gleichen Fehler erhalten: "Implementierung des Abfrage-Musters für Quelltyp 'DbSet' konnte nicht gefunden werden", aber die Lösung für mich bestand darin, einen Fehler auf der DbContext-Ebene zu beheben.
Als ich meinen Kontext erstellt habe, hatte ich folgendes:
public class ContactContext : DbContext
{
public ContactContext() : base() { }
public DbSet Contacts { get; set; }
}
Und mein Repository (ich folgte einem Repository-Muster in der ASP.NET-Anleitung) sah folgendermaßen aus:
public Contact FindById(int id)
{
var contact = from c in _db.Contacts where c.Id == id select c;
return contact;
}
Mein Problem kam von der ersten Einrichtung meines DbContext, als ich DbSet anstelle des Typs als Generic verwendete.
Ich änderte public DbSet Contacts { get; set; }
in public DbSet<Contact> Contacts { get; set; }
und plötzlich wurde die Abfrage erkannt.
Dies ist wahrscheinlich das, was k.m in seiner Antwort sagt, aber da er IEnumerable<t>
und nicht DbSet<<YourDomainObject>>
erwähnte, musste ich für ein paar Stunden in dem Code herumgraben, um die Zeile zu finden, die diese Kopfschmerzen verursacht hat.