2012-02-08 31 views
0

我是新的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循環遍歷度和專業列表。這是做這件事的最好方法嗎?我通常需要的不僅僅是組鍵,以顯示我的整行信息,並且只需要在列列中迭代一次或兩次列表,而不是隻顯示一次組密鑰並在大多數示例中遍歷所有內容我懂了。

回答

0

我沒那麼大的專家,LINQ和MVC,但面對你的問題我想:

  1. 應對控制器/模型數據準備,之後被教導這個觀點應該顯示的東西被關注只要。
  2. 我會用知識從這些主題來解決您的具體問題:

    一)多列分組: Group By Multiple Columns

    B)級聯作爲聚合函數: Using LINQ to concatenate strings

    C)使用聚合物和多列分組 How to write a LINQ query combining group by and aggregates?

一旦在視圖模型中有數據,只需顯示它即可。