我有一个关于如何对匿名类型进行排序的问题。
使用Linq2SQL我有以下查询,它返回一个提交列表:
var submissions = EventSubmissions
.Where(s => s.EventId.Equals(eventId));
考虑以下界面(有点简单):
public interface IQuerySorter
{
IOrderedQueryable Sort(IQueryable query);
IOrderedQueryable<T> Sort<T, U>(IQueryable<T> query, Expression<Func<T,U>> selector);
...
}
使用此界面可以实现许多“分拣机”,例如在日期,评级或是否已提名提交(投票)。
sortedQuery = sorter.Sort(submissions)
到目前为止一切顺利。提交可以“投票”。我使用以下查询获得了指定提交可能拥有的投票数:
var withVoteCount = submissions
.Select(s => new {NumberOfVotes = s.Votes.Count(), Submission = s});
我想使用我的“常规”排序器类对NumberOfVotes的这个新查询进行排序,但是遇到匿名类型/成员似乎不在存储库方法之外的问题,因此我无法排序它
非常感谢任何输入。
答案 0 :(得分:0)
答案 1 :(得分:0)
我建议使用Group By和Count创建视图或存储过程,以获得与以下相同的结果:
var withVoteCount = submissions
.Select(s => new {NumberOfVotes = s.Votes.Count(), Submission = s});
通过使用SQL,您可以按照投票次数告诉它。像这样的东西(粗略的例子):
select submissions.ID, submissions.Title, count(votes.ID) as NumberOfVotes
from submissions inner join votes on submissions.id = votes.submissionid
group by submissions.ID, submissions.Title
order by NumberOfVotes desc
在SQL Server数据库中创建sql视图或存储过程后,您可以将其放在Visual Studio的设计器中,并将其用作常规类或函数。