Vraag Kon een implementatie van het querypatroon niet vinden


In mijn silverlight-applicatie probeer ik een databaseverbinding te maken met behulp van LINQ. Eerst voeg ik een nieuwe LINQ to SQL-klasse toe en sleep ik mijn tabel met de naam "tblPersoon" erin.

Vervolgens probeer ik in mijn servicebestand de volgende query uit te voeren:

[OperationContract]
public tblPersoon GetPersoonByID(string id)
{
    var query = (from p in tblPersoon where p.id == id select p).Single();

Maar op tblPersoon geeft het me de volgende fout.

Kon een implementatie van het querypatroon voor het brontype niet vinden   'SilverlightApplication1.Web.tblPersoon'. 'Waar' niet gevonden.

En zelfs als ik het volgende probeer:

var query = (from p in tblPersoon select p).Single();

Het geeft me een foutmelding 'Selecteer' niet gevonden!

Code voor de gegenereerde klasse voor mijn tabel is hier te vinden: http://pastebin.com/edx3XRhi

Wat veroorzaakt dit en hoe kan ik dit mogelijk oplossen?

Dank je.


60
2017-11-21 17:18


oorsprong


antwoorden:


Is de tblPersoon implementeren IEnumerable<T>? U moet dit mogelijk doen met:

var query = (from p in tblPersoon.Cast<Person>() select p).Single();

Dit soort fout (Kon een implementatie van het querypatroon niet vinden) komt meestal voor wanneer:

  • U mist LINQ namespace gebruik (using System.Linq)
  • Type dat door u wordt bevraagd, wordt niet geïmplementeerd IEnumerable<T>

Bewerk:

Afgezien van het feit dat u query type (tblPersoon) in plaats van eigendom tblPersoons, je hebt ook een contextinstantie nodig (klasse die definieert tblPersoons eigendom), zoals dit:

public tblPersoon GetPersoonByID(string id)
{
    var context = new DataClasses1DataContext();
    var query = context.tblPersoons.Where(p => p.id == id).Single();
    // ...

162
2017-11-21 17:45



Mogelijk moet u een toevoegen using verklaring voor het bestand. De standaard Silverlight-klassesjabloon bevat deze niet:

using System.Linq;

109
2017-11-21 17:38



Zorg ervoor dat deze verwijzingen zijn opgenomen:

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

Voeg vervolgens de instructie Gebruik toe

using System.Linq;

12
2018-03-02 13:36



Ik had een soortgelijk probleem met gegenereerde sterk getypeerde datasets, de volledige foutmelding was:

Kan geen implementatie van het querypatroon vinden   brontype 'MyApp.InvcHeadDataTable'. 'Waar' niet gevonden.   Overweeg expliciet het type van de bereikvariabele 'rij' te specificeren.

Uit mijn code:

        var x =
            from row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;

Dus deed ik wat het suggereerde en specificeerde het type expliciet:

        var x =
            from MyApp.InvcHeadRow row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;

Dat werkte een traktatie.


6
2017-08-12 08:38



Je mist een gelijkheid:

var query = (from p in tblPersoon where p.id == 5 select p).Single();

where clausule moet resulteren in een boolean.

OF je zou niet moeten gebruiken where helemaal:

var query = (from p in tblPersoon select p).Single();

4
2017-11-21 17:31



Ik had dezelfde fout als beschreven door de titel, maar voor mij was het gewoon de installatie van Microsoft toegang 12.0 oledb herdistribueerbaar om te gebruiken met LinqToExcel.


0
2018-01-11 20:19



Hoi gemakkelijkste manier om dit te doen is om dit IEnumerable in een Queryable te converteren

Als het een query is, wordt het uitvoeren van query's eenvoudig.

Controleer deze code:

var result = (from s in _ctx.ScannedDatas.AsQueryable()
                              where s.Data == scanData
                              select s.Id).FirstOrDefault();
                return "Match Found";

Zorg ervoor dat u opneemt System.Linq. Op deze manier wordt uw fout opgelost.


0
2018-02-25 05:56



Voor degenen onder u (zoals ik) die teveel tijd verspild aan deze fout:

Ik kreeg dezelfde foutmelding: "Kon de implementatie van het querypatroon voor het brontype 'DbSet' niet vinden, maar de oplossing voor mij was het oplossen van een fout op het DbContext-niveau.

Toen ik mijn context creëerde, had ik dit:

public class ContactContext : DbContext
    {
        public ContactContext() : base() { }

        public DbSet Contacts { get; set; }
    }

En mijn repository (ik volgde een Repository-patroon in de ASP.NET-gids) zag er zo uit:

public Contact FindById(int id)
    {       
        var contact = from c in _db.Contacts where c.Id == id select c;
        return contact;
    }

Mijn probleem kwam van de initiële installatie van mijn DbContext, toen ik DbSet gebruikte als een generieke in plaats van het type.

ik ben veranderd public DbSet Contacts { get; set; } naar public DbSet<Contact> Contacts { get; set; } en plotseling werd de vraag herkend.


Dit is waarschijnlijk wat k.m zegt in zijn antwoord, maar sinds hij het zei IEnumerable<t> en niet DbSet<<YourDomainObject>> Ik moest een paar uur in de code graven om de lijn te vinden die deze hoofdpijn veroorzaakte.


0
2018-06-17 00:23