2010-04-07 93 views
1

我有一个如何排序匿名类型的问题。排序匿名类型

使用LINQ2SQL我有以下查询,返回提交的清单:

var submissions = EventSubmissions 
    .Where(s => s.EventId.Equals(eventId)); 

请看下面的接口(有点simplyfied):

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

任何输入将不胜感激。

+3

为什么不使用标准OrderBy LINQ扩展进行排序? – 2010-04-07 07:27:29

回答

0

我会建议创建使用组由视图或存储过程和计数,以获得相同的结果:

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服务器数据库SQL视图或存储过程后,你可以将它放在设计师在Visual Studio并用它作为普通类或函数。

+0

谢谢,胡安。需要考虑的事情。 – 2010-04-08 10:38:59