Как отсортировать столбец, которого нет в базе данных с LINQ для сущностей? - PullRequest
1 голос
/ 26 февраля 2011

LINQ to Entities 3.5 не поддерживает String.Join, поэтому я связываю свой gridview со свойством, которое я определяю вне оператора Select.Очевидно, что он не позволяет мне сортировать RecipientNames, потому что это просто IEnumerable, и это не имеет смысла.Как я могу использовать LINQ to Entities для сортировки в моем новом столбце?Если возможно, я бы хотел полностью избавиться от RecipientNamesList и создать что-то, что LINQ сможет обработать для сортировки.

IQueryable<NotificationDetail> resultsFlattened = results.Select(n => new NotificationDetail() 
{
..
RecipientNames = n.NotificationRecipients.Select(nr => nr.Recipient.RecipientNameFirst + " " + nr.Recipient.RecipientNameLast).Where(s => s.Trim().Length > 0)});
});

IQueryable<NotificationDetail> resultsPaged = ApplySortingPaging(resultsFlattened,SortPageOptions);

return resultsPaged.ToEntityList(results.Count()); //blows up here, obviously

public string RecipientNamesList
{
    get
    {
          return String.Join(", ", RecipientNames.ToArray());
    }
}

1 Ответ

0 голосов
/ 01 марта 2011

Это взрывается, потому что сортировка не может быть переведена в SQL. Простое решение - убедиться, что вы выполняете сортировку локально, а не в SQL Server. Просто добавьте ToList или AsEnumerable после первого запроса.

resultsFlattened = resultsFlattened.ToList(); 

Вы должны убедиться, что вы делаете свою подкачку страниц до этого, иначе вы могли бы вытаскивать большое количество строк из базы данных.

<ч />

Или вы используете библиотеку Linq.Translations , разработанную Дэмиеном Гвардом и другими. Это позволяет вам использовать локальные, рассчитанные свойства так, как вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...