Impossible de trouver une implémentation du motif de requête

Dans mon application silverlight, j’essaie de créer une connexion à une firebase database en utilisant LINQ. D’abord, j’ajoute une nouvelle classe LINQ to SQL et y glisse ma table appelée “tblPersoon”.

Ensuite, dans mon fichier de service, j’essaie d’exécuter la requête suivante:

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

Mais à tblPersoon, cela me donne l’erreur suivante.

Impossible de trouver une implémentation du modèle de requête pour le type de source ‘SilverlightApplication1.Web.tblPersoon’. “Où” pas trouvé.

Et même quand j’essaie ce qui suit:

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

Cela me donne une erreur en disant “Select” not found!

Le code de la classe générée pour ma table peut être trouvé ici: http://pastebin.com/edx3XRhi

Qu’est-ce qui cause cela et comment pourrais-je résoudre ce problème?

Je vous remercie.

Le tblPersoon implémente-t-il IEnumerable ? Vous devrez peut-être le faire en utilisant:

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

Ce type d’erreur ( Impossible de trouver une implémentation du modèle de requête ) se produit généralement lorsque:

  • Vous using System.Linq utilisation de l’espace de noms LINQ (en using System.Linq )
  • Le type que vous interrogez n’implémente pas IEnumerable

Modifier :

En dehors du fait que vous interrogiez le type ( tblPersoon ) au lieu de la propriété tblPersoons , vous avez également besoin d’une instance de contexte (classe qui définit la propriété tblPersoons ), comme ceci:

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

Vous devrez peut-être append une instruction using au fichier. Le modèle de classe Silverlight par défaut ne l’inclut pas:

 using System.Linq; 

Assurez-vous que ces références sont incluses:

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

Puis ajoutez l’instruction using

 using System.Linq; 

J’ai eu un problème similaire avec les jeux de données fortement typés générés, le message d’erreur complet était:

Impossible de trouver une implémentation du modèle de requête pour le type de source ‘MyApp.InvcHeadDataTable’. “Où” pas trouvé. Envisagez de spécifier explicitement le type de la variable de plage ‘row’.

De mon code:

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

J’ai donc fait comme il a suggéré et explicitement spécifié le type:

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

Ce qui a fonctionné un régal.

Il vous manque une égalité:

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

where clause doit donner un booléen.

OU vous ne devriez pas utiliser where :

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

J’avais la même erreur que celle décrite par titre, mais pour moi, il s’agissait simplement d’installer Microsoft Access 12.0 oledb redissortingbuable à utiliser avec LinqToExcel.

Salut le moyen le plus facile de le faire est de convertir ce IEnumerable en un Queryable

S’il s’agit d’une requête, l’exécution des requêtes devient facile.

Veuillez vérifier ce code:

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

Assurez-vous d’inclure System.Linq . De cette façon, votre erreur sera résolue.

Pour ceux d’entre vous (comme moi) qui ont perdu trop de temps avec cette erreur:

J’avais reçu la même erreur: “Impossible de trouver l’implémentation de query Pattern pour le type de source ‘DbSet'” mais la solution pour moi était de corriger une erreur au niveau de DbContext.

Lorsque j’ai créé mon contexte, j’ai eu ceci:

 public class ContactContext : DbContext { public ContactContext() : base() { } public DbSet Contacts { get; set; } } 

Et mon repository (je suivais un modèle de référentiel dans le guide ASP.NET) ressemblait à ceci:

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

Mon problème venait de la configuration initiale de mon DbContext, lorsque j’ai utilisé DbSet comme générique plutôt que comme type.

J’ai changé de public DbSet Contacts { get; set; } public DbSet Contacts { get; set; } public DbSet Contacts { get; set; } au public DbSet Contacts { get; set; } public DbSet Contacts { get; set; } public DbSet Contacts { get; set; } et soudain la requête a été reconnue.


C’est probablement ce que km dit dans sa réponse, mais comme il a mentionné IEnumerable et non DbSet<> j’ai dû fouiller le code pendant quelques heures pour trouver la ligne qui causait ce mal de tête.