在MVC

2016-05-14 93 views
0

拆除名單重複標題所以我產生頂部的名單額定標題從數據庫中拉出,並傳回評級列表。我遇到的問題是,它正在返回重複。我可以使用另一個列表來比較和排除標題,但這隻會在初始函數需要時留下一對(5)。因爲我不確定在最初的功能中如何防止它,希望有人能幫助我。由於在MVC

這就是我拉TOP5標題:

public List<MediaRating> IndividualTopFive() 
{ 
    var topFiveList = db.MediaRatingData 
          .Include(u => u.Title) 
          .Where(u => u.RateFor.UserName == User.Identity.Name) 
          .OrderByDescending(i => i.MediaRatingID) 
          .OrderByDescending(r => r.Rating) 
          .Take(5) 
          .ToList(); 
    return topFiveList; 
+0

你確定數據不在數據庫中複製? –

+0

事實上,數據庫中存在重複的數據(這背後有一個原因),但我只是想篩選前5個不同的標題。我正在考慮只是將整個事件放入for循環計數到5,添加到列表中,並將(1)將其添加到列表中,並確保下一個標題在下面的迭代中不匹配...似乎有點貧民區雖然。我想這可能更簡單一些,可以添加到「.OrderByDescending(i => i.MediaRatingID)」行中,但我並不知道。 – Abstract3000

+1

看到這個http://stackoverflow.com/a/489421/2374987 –

回答

0

首先注意它很可能是你在你的數據庫的重複,所以也許你應該簡單地刪除檔案擺在首位。

如果你確信你想從您的查詢結果刪除重複,那麼這取決於你如何MediaRating類是什麼樣子,你可以使用LINQ的Distinct方法或DistictBy從MoreLinq(或John Skeet's post)。

注意Distinct方法可能重新排序元素(這取決於LINQ提供程序的實現),所以在排序前,你應該稱呼它。另一方面,您可以在.Take(5)之前使用John Skeet的DistinctBy以獲得適當的結果,因爲它可以保證元素的順序。

+0

謝謝你,我只是在那裏,所以我讀了關於.Distinct()返回一個IEnumerable,但我已經有.ToList()會給它一個鏡頭。 – Abstract3000

+1

@ Abstract3000你應該選前使用distinct(因爲它並不能保證維持秩序),也可以使用約翰表的DistinctBy之前「取(5)」,以獲得相應的結果。如果你看看DistinctBy的實現,你會注意到它保留了元素的順序。 –

+0

在任何排序之前嘗試在頂部添加.Distinct(),並且沒有修復它,因此現在正在查看John Sheets方法。 – Abstract3000