Метод x не поддерживает перевод на SQL - PullRequest
5 голосов
/ 15 марта 2011

Я хочу написать запрос, который должен получить объект пользователя и количество сообщений, которые пользователь уже разместил.Я сделал это следующим образом:

var query = (from u in _db.Repository<User>()
             where u.IsDeleted != true
             select new UserWithMessagecount()
             {
                 User = u
                 MessageCount = GetUserMessageCount(u.Documents).Count(),
             });

Я использую метод, потому что некоторые сообщения должны быть отфильтрованы (динамически) .

Для сохранениявсе просто, я опубликую функцию без логики сортировки (которая все еще выдает ту же ошибку).

    private EntitySet<Document> GetUserMessageCount(EntitySet<Document> set)
    {
        return set;
    }

Возвращенная ошибка:

Метод 'x' не поддерживает перевод на SQL.

Есть идеи, как решить эту проблему?

Ответы [ 3 ]

7 голосов
/ 04 июня 2012

используйте этот синтаксис вместо:

 var query = (from u in _db.Repository<User>()
             let MessageCount = GetUserMessageCount(u.Documents).Count()
             where u.IsDeleted != true
             select new UserWithMessagecount()
             {
                 User = u,
                 MessageCount = MessageCount
             });
7 голосов
/ 15 марта 2011

Linq-to-SQL будет пытаться преобразовать вашу всю статистику в SQL, и, конечно, нет GetUserMessageCount ().

Вам нужно будет взять результаты запроса SQL, перечислив его, а затем применить логику на стороне C #.

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

Что вам нужно сделать, это использовать группировку в вашей проекции.

var query = from u in _db.Repository<User>()
            where !u.IsDeleted
            group u by u.UserId into g
            select new UserWithMessageCount {
               User = g.First(x => x.UserId == g.Key),
               MessageCount = g.Sum(x => x.Messages.Count())
            }

Это должно работать.

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