2012-10-22 82 views
1

從控制器創建MVC 3視圖。我的模型「MyList」包含大量的記錄。MVC 3控制器GroupBy查看錯誤

var model = _db.MyList.GroupBy(r => r.myKey); 

,我發現了錯誤:「傳遞到字典的模型產品類型‘System.Collections.GenericlList’1 ...但是這字典當我使用下面的LINQ語句來創建我的模型需要型「System.Collections.Generic.IEnumerable」的模型項...

在視圖我在第一行下面的代碼:

@model IEnumerable<MyApp.Models.MyList> 

我試圖返回

return View(model.ToList()); 

從控制器,但沒有喜悅。我錯過了什麼?

回答

0

model.ToList()將返回List<T>其中T是MyList。您的型號是直式MyList。如果上面的var聲明已經返回MyList,那麼只需執行return View(model)

+0

謝謝你的迴應。當我執行'返回視圖(模型)'時,我收到上述錯誤。 – soulia

0

的GroupBy返回IGrouping<TKey, TSource>的集合,而不是MyList(這是奇怪的,反正,你不會有一個列表的列表。

,它甚至沒有多大意義,一個GroupBy轉換成一個列表不管怎麼說。?你的意思是在實際工作OrderBy

+0

OrderBy返回的記錄過多 - GroupBy返回單個鍵的子集,例如,每個鍵都有幾行。也許我應該在OrderBy的鍵上使用DISTINCT? – soulia

+0

@soulia - 不,Groupby會返回同樣多的記錄,但它在多個組中都會這樣做。記錄的總數應該相同。我不能說使用Distinct會更好,因爲我不知道您的數據模型或您的要求。 –

+0

謝謝!我想要做的只是返回記錄的子集。例如,如果我的設置是這樣的: -ID子鍵名年齡 -110湯姆20 -2 10弗雷德21 -3 11 30仙-4 12吉爾32 我的結果集是10,11 ,12 – soulia

0

這一次整個上午都幹嗎老盯住我,我發現在下面的帖子中回答我的問題:

Linq Distinct() by name for populate a dropdown list with name and value

我基本上返回以下:

public static IEnumberable<MyModel> FindTheKeys(this IQueryable<MyModel> myList) 
{ 
    return myList.OrderBy(r => r.AreaKey); 
} 

,然後執行選擇如在上述柱表示。

var model = _db.MyModel.FindTheKeys().GroupBy(r => r.AreaKey).Select(g => g.First());