Dans mon application silverlight, j'essaie de créer une connexion à une base de données à l'aide de LINQ . Tout 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(string 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 motif de requête pour le type de source 'SilverlightApplication1.Web.tblPersoon'. "Où" pas trouvé.
Et même quand j'essaye 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 le résoudre?
Je vous remercie.
Est-ce que tblPersoon
implémente IEnumerable<T>
? Vous devrez peut-être le faire en utilisant:
var query = (from p in tblPersoon.Cast<Person>() select p).Single();
Ce type d'erreur (Impossible de trouver une implémentation du motif de requête) se produit généralement lorsque:
using System.Linq
)IEnumerable<T>
Modifier :
Outre le fait que vous interrogez 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(string id)
{
var context = new DataClasses1DataContext();
var query = context.tblPersoons.Where(p => p.id == id).Single();
// ...
Vous devrez peut-être ajouter 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:
Ajoutez ensuite l'instruction using
using System.Linq;
J'ai eu un problème similaire avec généré des ensembles de données fortement typés, le message d'erreur complet était:
Impossible de trouver une implémentation du modèle de requête pour type de source 'MyApp.InvcHeadDataTable'. "Où" pas trouvé. Envisagez explicitement de spécifier le type de la variable de plage 'ligne'.
De mon code:
var x =
from row in ds.InvcHead
where row.Company == Session.CompanyID
select row;
J'ai donc fait ce qui est 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();
La clause where
doit donner un booléen.
OU vous ne devriez pas utiliser where
du tout:
var query = (from p in tblPersoon select p).Single();
Salut le moyen le plus simple de faire cela est de convertir cet IEnumerable en un Queryable
Si c'est un objet interrogeable, alors effectuer 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.
J'ai eu la même erreur, mais pour moi, cela a été attribué à avoir une base de données et une table qui portent le même nom. Lorsque j'ai ajouté l'objet d'entité ADO .NET à mon projet, il a mal généré ce que je voulais dans le fichier de contexte de ma base de données:
// Table
public virtual DbSet<OBJ> OBJs { get; set; }
qui aurait dû être:
public virtual DbSet<OBJ> OBJ { get; set; }
Et
// Database?
public object OBJ { get; internal set; }
ce dont je n'avais pas vraiment besoin, alors je l'ai commenté.
J'essayais de tirer dans ma table comme ça, dans mon contrôleur, quand j'ai eu mon erreur:
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);
}
J'ai corrigé le contexte de ma base de données et tout allait bien après.
J'ai eu la même erreur que décrite par le titre, mais pour moi, il s'agissait simplement d'installer l'accès Microsoft 12.0 oledb redistribuable à utiliser avec LinqToExcel.
Pour ceux d'entre vous (comme moi) qui ont perdu trop de temps de cette erreur:
J'avais reçu la même erreur: "Impossible de trouver l'implémentation de la requête Pattern pour le type de source 'DbSet'", mais la solution pour moi consistait à corriger une erreur au niveau de DbContext.
Lorsque j'ai créé mon contexte, j'avais ceci:
public class ContactContext : DbContext
{
public ContactContext() : base() { }
public DbSet Contacts { get; set; }
}
Et mon référentiel (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 est venu de la configuration initiale de mon DbContext, quand j'ai utilisé DbSet comme un générique au lieu du type.
J'ai changé public DbSet Contacts { get; set; }
en public DbSet<Contact> Contacts { get; set; }
et tout à coup la requête a été reconnue.
C’est probablement ce que dit k.m dans sa réponse, mais comme il a mentionné IEnumerable<t>
et non DbSet<<YourDomainObject>>
, j’ai dû fouiller dans le code pendant quelques heures pour trouver la ligne qui a provoqué ce mal de tête.