it-swarm.com.de

Es wurde keine Implementierung des Abfragemusters gefunden

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.

68
Schoof

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:

  • Es fehlt die Verwendung des LINQ-Namespaces (using System.Linq).
  • Typ, den Sie abfragen, implementiert IEnumerable<T> nicht

Bearbeiten :

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();
    // ...
185
k.m

Möglicherweise müssen Sie der Datei eine using-Anweisung hinzufügen. Die Standardvorlage der Silverlight-Klasse enthält sie nicht:

using System.Linq;
129
Bryan Watts

Stellen Sie sicher, dass diese Referenzen enthalten sind:

  • System.Data.Linq 
  • System.Data.Entity 

Fügen Sie dann die using-Anweisung hinzu

using System.Linq;
18
MobileMon

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.

6
Stephen Turner

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();
5
Adrian Carneiro

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.

0
Abhay Shiro

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.

0
vapcguy

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.

0
BanMe

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.

0
TylerSmall19