Я пытаюсь создать выражение 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]
))