2010-04-07 162 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