2014-04-28 114 views
4

我試圖獲取每種類型的內容最近,我目前使用類似於下面的代碼東西,每種類型中的EntityFramework

int n = 10; 
var contents = Entities.OrderByDescending(i => i.Date); 

IQueryable<Content> query = null; 
for (int i = 1; i<=5; i++) 
{ 
    if (query == null) 
    { 
     query = contents.Where(c => c.ContentTypeIndex == i).Take(n); 
    } 
    else 
    { 
     query = query.Concat(contents.Where(c => c.ContentTypeIndex == i).Take(n)); 
    } 
} 

一個取N個記錄中選擇各組前n行其他解決方案可以創建一個SP,但是可以通過在EF中分組來完成嗎?如果沒有,更清潔的解決方案?

+0

可能重複的[使用LINQ to Entities獲取最好的N條記錄](http://stackoverflow.com/questions/2874599/get-top-n-records-using-linq-to-entities) –

+2

@AndyRefuerzo不,一點也不。 – rikitikitik

回答

10
contents.Where(c => c.ContentTypeIndex >= 1 && c.ContentTypeIndex <= 5) 
     .GroupBy(c => c.ContentTypeIndex) 
     .SelectMany(g => g.Take(n)); 

注意:如果你想選擇所有類型的索引,那麼你就需要在這裏where過濾器。