排序匿名类型

时间:2010-04-07 07:22:32

标签: c# linq-to-sql anonymous-types

我有一个关于如何对匿名类型进行排序的问题。

使用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的这个新查询进行排序,但是遇到匿名类型/成员似乎不在存储库方法之外的问题,因此我无法排序它

非常感谢任何输入。

2 个答案:

答案 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的设计器中,并将其用作常规类或函数。