允許我從頭開始:我是ASP.NET MVC上的n00b。我喜歡它,但我是一個n00b。使用LINQ在ASP.NET MVC中傳遞數據 - 憨態可012
我想從LINQ查詢中傳回「複雜」數據。我知道如何使用數據上下文,然後在我發回數據時將這些數據進行轉換,但是當我執行一個更復雜的LINQ查詢(返回匿名類型)時,就會出現問題。
我看到有人提出類似問題(MVC LINQ to SQL Table Join Record Display),答案似乎是創建一個新的數據類型來捕獲LINQ查詢中的數據。我不明白我可以在控制器中創建一個var類型,並訪問控制器中的成員字段,但是如果我想將該var傳回給View,我需要爲此創建一個新的類。
這裏是我的控制器代碼:
var vrGoodResults1 = from records in db.Words
group records by records.word1 into g
select new
{
strWord = g.Key,
intWordCount = g.Count()
};
ViewData["GoodWords"] = vrGoodResults1;
return View();
和視圖看起來是這樣的:
<% foreach (var kvp in (IEnumerable)ViewData["GoodWords"]) %>
<% { %>
<%= String.Format("{0} was used times", kvp) %> <br />
<% } %>
,輸出:
{strWord = cool, intWordCount = 2 } was used times
{strWord = educated, intWordCount = 1 } was used times
{strWord = great, intWordCount = 1 } was used times
{strWord = smart, intWordCount = 6 } was used times
{strWord = strong, intWordCount = 2 } was used times
{strWord = super smart, intWordCount = 2 } was used times
所以數據越來越來查看,但我不能通過在LINQ隊列中分配的字段名稱來引用數據RY。當我嘗試傾銷kvp.GetType(),我得到:
<>f__AnonymousType1`2[System.String,System.Int32]
所有我想要做的是沿着線的東西:
<%= String.Format("{0} was used {1} times", kvp.strWord, kvp.intWordCount) %> <br />
但我對KVP得到一個編譯錯誤。 strWord。
error CS1061: 'object' does not contain a definition for 'strWord' and no extension method 'strWord' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
如果我插入下面的代碼到我的控制器:
foreach (var kvp in vrGoodResults1)
{
string strNew = kvp.strWord;
}
我可以引用我的可變KVP的字段而不編譯錯誤。所以當從Controller傳遞給View時,有些東西會迷失方向。我忘了在某個地方包括什麼東西?也許是「使用」或在「< @ Page」指令中,我忘記繼承某些內容了嗎?
當您使用LINQ清除數據上下文時,只需設置IEnumerable <「數據類型」>其中「數據類型」=您的數據上下文類型,並且您都很好。當你將數據集減少到LINQ中的新內容時,我無法相信最好的答案是創建一個新類,以便我可以在View中使用它。
好答案...謝謝!然而,如果你改變你的查詢,你將不得不重構一個類,這對我來說確實很愚蠢。有關進行查詢測試的任何建議? – 2009-02-09 18:04:50