12

Вопрос по asp.net, .net, linq – Дублирование строк при привязке данных с помощью LINQ к объектам

У меня есть проблемы с привязкой Telerik RadGrid и простого ванильного ASP.NET GridView к результатам следующего запроса LINQ to entity. В обоих случаях сетки содержат правильное количество строк, но данные только из первой группы строк дублируются во всех других строках. Я непосредственно назначаю возвращаемое значение из этого кода свойству 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;

MORE:

  1. The query sent to SQL Server by LINQ works.
  2. Iterating the LINQ query results before returning them results in the same duplications.
  3. Iterating the LINQ results in the calling method, before binding, results in the same duplications.

UPDATE: Based on the very logical and fitting advice from Marc GravelError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от ProfK
  • Error: User Rate Limit Exceeded

    от
  • @Marc, отличный материал, вы определили проблему наиболее точно. Однако вы предлагаете просто удалить флаг ключа сущности из проблемного столбца, но мне не разрешено это делать.

    от ProfK
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от ProfK
  • Error: User Rate Limit Exceeded

    от Alexander Prokofyev
  • Error: User Rate Limit Exceeded

    от ProfK
  • Error: User Rate Limit Exceeded

    от Marc Gravell♦
  • Error: User Rate Limit Exceeded

    от Alexander Prokofyev
  • Error: User Rate Limit Exceeded

    от Phil.Wheeler
  • 0

    Error: User Rate Limit Exceeded

    select new <ObjectName>
    {
    a = v.a
    b = v.b
    }.
    

  • 1

    Error: User Rate Limit Exceeded

    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).Distinct();
    }
    

  • 0

    Error: User Rate Limit Exceeded

  • 30

    Error: User Rate Limit Exceeded

    id     | name       | ...
    -------+------------+------
    1      | Fred       | ...
    2      | Barney     | ...
    1      | Wilma      | ...
    1      | Betty      | ...
    

    if it thinks id is a primary keyforcedididdoesn'tid

    id