LINQ to SQL Порядок из внешнего метода - PullRequest
0 голосов
/ 17 ноября 2010

Мне кажется, это было тяжело ...

var MostRated = (from p in db.Posts
                                 let AverageRating = CalculateAverageRatingFromPost(p)
                                 where p.PostStatus == Convert.ToInt32(PostStatusEnum.Published.Value) && p.IsDeleted == false
                                 orderby p.PublishedDate descending
                                 select new
                                 {
                                     PostUrl = Common.PostUrl(p.Section.Name, p.Permalink),
                                     Title = Common.TrimString(p.Title, 50),
                                     Excerpt = Common.TrimString(p.Excerpt, 80),
                                     AverageRate =  CalculateAverageRating((from pr in db.Ratings
                                                    where pr.ObjectType == Convert.ToInt32(ObjectTypeEnum.Post.Value) && pr.ObjectID == p.ID
                                                    select pr).SingleOrDefault()),
                                     PublishedDate = new DateHelper().DateTimeInWords(p.PublishedDate.Value)
                                 }).OrderByDescending(o => o.AverageRate).Take(5).ToList();

и другой метод

private Decimal CalculateAverageRating(Rating pr)
        {
            if (pr != null)
            {
                Decimal Average = ((1 * (Decimal)pr.Star1) + (2 * (Decimal)pr.Star2) + (3 * (Decimal)pr.Star3) + (4 * (Decimal)pr.Star4) + (5 * (Decimal)pr.Star5)) / ((Decimal)pr.Star1 + (Decimal)pr.Star2 + (Decimal)pr.Star3 + (Decimal)pr.Star4 + (Decimal)pr.Star5);
                return Average;
            }
            else
            {
                return 0;
            }
        }

Я получаю эту ошибку времени выполнения "нет поддерживаемого перевода в SQL".

Мне нужно получить списки постов, сделать небольшие быстрые подсчеты рейтинга, а затем отсортировать их по возрастанию и убрать только 5 постов.

Спасибо

1 Ответ

1 голос
/ 17 ноября 2010

Я не проверял это, но попробуйте определить функцию как объект Expression.

Expression<Rating, Decimal> CalculateAverageRating =
    pr => (Decimal)(
        pr == null ? 0 :
         (pr.Star1 + 2*pr.Star2 + 3*pr.Star3 + 4*pr.Star4 + 5*pr.Star5)
        /(pr.Star1 +   pr.Star2 +   pr.Star3 +   pr.Star4 +   pr.Star5));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...