我正在尝试创建一个linq表达式,我可以计算事件注释的数量以及SUM的投票数量。这就是我所拥有的,但我没有得到适当的结果。
我的例子是在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
我为测试这一点所做的是对所有事件都有ZERO评论,并且upvote ONE事件。那个事件“应该”漂浮到顶部,但它不存在。
非常感谢任何帮助。
我已经尝试在LinqPad中构建表达式,但不幸的是它抛出了一个错误(注意:我的代码中没有抛出此错误)
重载解析失败,因为没有 可以调用可访问的“OrderBy” 有了这些论点: 扩展方法'Public Function 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'的成员。 扩展方法'Public Function 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':数据类型 类型参数不能 从这些论点中推断出来。 明确指定数据类型 可能会纠正此错误。 扩展方法'Public Function OrderBy(Of TKey)(keySelector As System.Func(Of LINQPad.User.Events, TKey))作为 System.Linq.IOrderedEnumerable(中 LINQPad.User.Events)'定义于 'System.Linq.Enumerable':'评论' 不是会员 'LINQPad.User.Events'。 扩展方法'Public Function OrderBy(Of TKey)(keySelector As System.Func(Of LINQPad.User.Events, TKey))作为 System.Linq.IOrderedEnumerable(中 LINQPad.User.Events)'定义于 'System.Linq.Enumerable':数据类型 类型参数不能 从这些论点中推断出来。 明确指定数据类型 可能会纠正此错误。
这是生成的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]
))
答案 0 :(得分:2)
您的意思是OrderByDescending
吗? ;)