我是新的Asp.Net,MVC3,Linq,和其他一切相關的。我非常習慣PHP和ColdFusion,所以請原諒我的無知!基本上我想要做的是在ColdFusion中重新創建這種情況,我可以執行cfoutput組屬性的等價物。我已經習慣,只是調用存儲過程,然後做LINQ to SQL分組和傳遞到一個視圖
<cfoutput group="id">
,然後又內CFOUTPUT對於具有非不同的數據的列。奇蹟般有效!與Asp.Net不太一樣。
我想繼續使用我的存儲過程,它從兩個表中返回一對一關係的聯接。舉例來說,假設我有3列:全名,標題和畢業年份。畢業年度是從連接表列,所以從存儲過程我的結果是這樣的:
教授吉姆2005年
教授吉姆2008年
教授吉姆2011
我送這個來查看。我認爲這是View的工作,然後根據其中一列(可能是全名)對數據進行分組。我想輸出HTML表3列,在這種情況下,我將有一行:
教授吉姆2005年,2008年,2011
我用Google搜索噸使用這個東西叫做一組關鍵的例子。這似乎對我沒有幫助,因爲我對輸出一個值「Jim」(或任何分組值)不感興趣,我需要爲每行輸出「Jim」和「Professor」值。我的想法是我需要2個foreach循環,外部循環顯示全名和標題,內部循環經歷畢業年份所有可能的匹配。我似乎無法獲得一個組的畢業年限,特別是使用這種IGrouping語法。關鍵只能存儲一個值,我需要該行的每個值,我只需要一個或兩個值來迭代。在執行輔助linq分組後,我應該嘗試創建自定義視圖模型,然後將其發送到強類型視圖?
編輯: 好吧,我有工作的代碼,但它似乎非常低效的,因爲我基本上要重新定義一切,我從我的存儲過程有列/值。它幾乎讓我想忘記存儲過程,只是使用LINQ處理所有事情。看來我所要求的是一種「多列組」,link非常有幫助。
var records = db.getRecords();
var groups = from r in records
group r by new
{
r.id
}
into row
select new ListVM()
{
id = row.Key.id,
fullname = row.Select(x => x.fullname).First(),
title = row.Select(x => x.title).First(),
degrees = row.Select(x => x.degree_name).ToList(),
majors = row.Select(x => x.major_name).ToList()
};
return View(groups);
我當然必須創建一個ViewModel才能工作。在我看來,然後我可以使用for循環遍歷度和專業列表。這是做這件事的最好方法嗎?我通常需要的不僅僅是組鍵,以顯示我的整行信息,並且只需要在列列中迭代一次或兩次列表,而不是隻顯示一次組密鑰並在大多數示例中遍歷所有內容我懂了。