J'ai des problèmes pour lier à la fois un telerik RadGrid et un plain vanilla ASP.NET GridView aux résultats de la requête LINQ to entities suivante. Dans les deux cas, les grilles contiennent le nombre correct de lignes, mais les données provenant uniquement de la première poignée de lignes sont dupliquées dans toutes les autres lignes. J'affecte directement la valeur de retour de ce code à la propriété DataSource sur les grilles.Lignes en double lors de la liaison de données avec LINQ aux entités
public IEnumerable<DirectoryPersonEntry> FindPersons(string searchTerm)
{
DirectoryEntities dents = new DirectoryEntities();
return from dp in dents.DirectoryPersonEntrySet
where dp.LastName.StartsWith(searchTerm) || dp.Extension.StartsWith(searchTerm)
orderby dp.LastName, dp.Extension
select dp;
}
AJOUTÉE: C'est le code ADO.NET plaine alternatif qui fonctionne:
DataTable ret = new DataTable();
using (SqlConnection sqn = new SqlConnection(ConfigurationManager.ConnectionStrings["WaveAdo"].ConnectionString))
{
SqlDataAdapter adap = new SqlDataAdapter("select * from DirectoryPersonList where LastName like '" + searchTerm + "%' order by LastName ", sqn);
sqn.Open();
adap.Fill(ret);
}
return ret;
PLUS:
- La requête envoyée à SQL Server par LINQ fonctionne.
- L'itération des résultats de la requête LINQ avant leur renvoi entraîne les mêmes duplications.
- L'itération des résultats LINQ dans la méthode d'appel, avant la liaison, entraîne les mêmes duplications.
MISE À JOUR: Sur la base des conseils très logique et le montage de Marc Gravel ci-dessous, je trouve que le concepteur EF avait fait une supposition très inculte à une entité clé pour ma classe d'entité, le premier champ dans sa liste de champs, Département, dont il existe seulement environ sept entrées partagées dans tous les autres enregistrements.
C'est en effet la cause de la duplication. Si seulement je pouvais changer ou supprimer la clé d'entité, mais ce concepteur EF avec toute la logique métier d'un Etch-a-Sketch est admirablement engagé à répéter son choix de clé retardé en riant de moi bloqué dehors en suppliant de changer la clé.
Etes-vous sûr de ce que la table ne contient pas de doublons? La requête est correcte. –
@Alexander, oui, j'en suis sûr. Une requête DataTable simple sur la même vue entraîne la liaison correcte des grilles. – ProfK
S'il vous plaît, montrez plus de code. A la fois fonctionnel et problématique. –