Linq: OrderBy Сумма нескольких полей - PullRequest
1 голос
/ 18 января 2011

Я пытаюсь создать выражение linq, с помощью которого я могу СЧИТАТЬ количество комментариев к событию, а также СУММУ количество голосов. Вот что у меня есть, но я не получаю подходящих результатов.

Мой пример сделан на VB.Net, но я могу иметь дело и с примерами на C #.

    Public Function GetHotEvents(ByVal skip As Integer) As List(Of Domain.Event) Implements IEventService.GetHotEvents
        ''# Our order by sequence just takes the number of votes and multiplies
        ''# it by two. Then takes the number of comments and adds it to the
        ''# vote count.  This way up-voted events will climb to the top while
        ''# down-voted events will fall to the bottom.  Comments also add to
        ''# the "hotness" of the event.
        Return _EventRepository.Read() _
            .Where(Function(e) e.EventDate >= Date.Today) _
            .OrderBy(Function(e) (((e.EventVotes.Sum(Function(s) s.Vote)) * 2) + (e.Comments.Count))) _
            .Skip(skip) _
            .Take(5) _
            .ToList()
    End Function

Что я сделал, чтобы проверить это, так это получить НУЛЕВЫЕ комментарии ко всем событиям и добавить одно событие. Это событие «должно» всплыть наверх, но его там нет.

Любая помощь будет принята с благодарностью.

1010 * редактировать * Я пытался построить выражение в LinqPad, но, к сожалению, оно выдало ошибку (примечание: эта ошибка не возникает в моем коде) Не удалось разрешить перегрузку, потому что нет доступный 'OrderBy' можно назвать с этими аргументами: Метод расширения 'Открытая функция OrderBy (Of TKey) (keySelector As System.Linq.Expressions.Expression (Из System.Func (Of LINQPad.User.Events, TKey))) как System.Linq.IOrderedQueryable (Из LINQPad.User.Events) 'определено в 'System.Linq.Queryable': 'Комментарии' не является участником LINQPad.User.Events. Метод расширения 'Открытая функция OrderBy (Of TKey) (keySelector As System.Linq.Expressions.Expression (Из System.Func (Of LINQPad.User.Events, TKey))) как System.Linq.IOrderedQueryable (Из LINQPad.User.Events) 'определено в 'System.Linq.Queryable': тип (ы) данных параметров типа (ов) не может быть вывод из этих аргументов. Указание типа данных в явном виде может исправить эту ошибку. Метод расширения 'Открытая функция OrderBy (Of TKey) (keySelector As System.Func (Of LINQPad.User.Events, TKey)) как System.Linq.IOrderedEnumerable (Из LINQPad.User.Events) 'определено в 'System.Linq.Enumerable': 'Комментарии' не является членом 'LINQPad.User.Events'. Метод расширения 'Открытая функция OrderBy (Of TKey) (keySelector As System.Func (Of LINQPad.User.Events, TKey)) как System.Linq.IOrderedEnumerable (Из LINQPad.User.Events) 'определено в 'System.Linq.Enumerable': Тип (ы) данных параметров типа (ов) не может быть вывод из этих аргументов. Указание типа данных в явном виде может исправить эту ошибку. редактировать 2

Вот сгенерированный SQL

DECLARE @p0 Int = 2    

SELECT *
FROM [dbo].[Events] AS [t0]
ORDER BY (((
    SELECT SUM([t1].[Vote])
    FROM [dbo].[EventVotes] AS [t1]
    WHERE [t1].[EventID] = [t0].[ID]
    )) * @p0) + ((
    SELECT COUNT(*)
    FROM [dbo].[Comments] AS [t2]
    WHERE [t2].[EventID] = [t0].[ID]
    ))

1 Ответ

2 голосов
/ 18 января 2011

Вы имели в виду OrderByDescending?;)

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