У меня есть проблемы, связывающие как telerik RadGrid, так и простой ванильный ASP.NET GridView с результатами следующего запроса LINQ к объектам. В обоих случаях сетки содержат правильное количество строк, но данные только из первой части строк дублируются во всех остальных строках. Я прямо присваиваю возвращаемое значение из этого кода свойство DataSource на сетках.
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;
}
ADDED: Это альтернативный простой ADO.NET-код, который работает:
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;
БОЛЬШЕ:
- Выполняется запрос, отправленный в SQL Server по LINQ.
- Итерация результатов запроса LINQ перед возвратом результатов приводит к тем же дублированиям.
- Итерация результатов LINQ в вызывающем методе перед привязкой приводит к тем же дублированиям.
UPDATE: Основываясь на очень логичном и подходящем совете от Марка Гравеля ниже, я обнаружил, что дизайнер EF сделал очень необразованную догадки в Entity Key для моего класса сущности, первого поля в его списке полей, Department, из которых есть только около семи записей, общих для всех других записей.
Это действительно причина дублирования. Если бы я мог изменить или удалить ключ сущности, но этот дизайнер EF со всей бизнес-логикой Etch-a-Sketch превосходно привержен повторению этого замедленного выбора ключа, а смех над мной заперт вне прошения, чтобы изменить ключ.