這只是一個例子。(測試&工作)。那就是我保持方法在控制器類中。我建議你將方法移動到某個服務層,以便許多UI /控制器可以使用它。
public ActionResult Index()
{
var items= GetUniversities();
return View(items);
}
private List<DataRow> GetUniversities()
{
List<DataRow> list=null;
string srtQry = "SELECT U.* FROM Office O INNER JOIN
CampusUniversity CU ON O.IdCampus equals CU.IdCampus
INNER JOIN UNIVERSITY U ON U.IdUniversity=CU.IdUniversity";
string connString = "Database=yourDB;Server=yourServer;UID=user;PWD=password;";
using (SqlConnection conn = new SqlConnection(connString))
{
string strQry = "";
using(SqlCommand objCommand = new SqlCommand(srtQry, conn))
{
objCommand.CommandType = CommandType.Text;
DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(objCommand);
conn.Open();
adp.Fill(dt);
if (dt != null)
{
list = dt.AsEnumerable().ToList();
}
}
}
return list;
}
請記住,GetCustomers方法返回一個DataRows列表。不是您的自定義域實體。 實體框架爲您提供域實體列表。所以在自定義SQL的情況下,您需要將Data Row自己映射到自定義對象的實例。
使用LINQ,你可以的DataRow的列表轉換爲您的自定義對象這樣
public ActionResult Index()
{
var items= GetCustomers();
var newItems = (from p in items
select new
{
Name= p.Field<String>("Name"),
CampusName= p.Field<String>("CampusName")
}).ToList();
return View(newItems);
}
這會給你其中有2個屬性,Name
和CampusName
匿名類型的列表。假設名稱和校園名稱是查詢結果中存在的2列。
EDIT2:根據註釋,在視圖中列出這些數據,創建一個名爲索引視圖控制器內的下視圖(在這裏我們寫這個動作方法)的文件夾Folder.We需要使它成爲一個強類型視圖。可是等等!我們會傳遞什麼類型的視圖?
我們的結果是匿名類型。所以我們將在這種情況下創建一個ViewModel,而不是匿名的,我們將返回一個ViewModel的列表。現在
public class UniversityViewModel
{
public string UniversityName { set;get;}
public string CampusName { set;get;}
}
,我們將更新我們這樣的指數動作的代碼。
var newItems = (from p in items
select new UserViewModel
{
UniversityName = p.Field<String>("Name"),
CampusName = p.Field<String>("CampusName")
}).ToList();
唯一的變化是我們現在在這裏提到了一種類型。所以輸出不再是匿名類型。但已知類型。
讓我們回到我們的視圖並編寫這樣的代碼。
@model IEnumerable<SO_MVC.Models.UserViewModel>
@foreach (var item in Model)
{
<p>@item .UniversityName @item.CampusName</p>
}
此視圖強類型爲ViewModel的集合。像往常一樣,我們正在循環顯示。這應該很好。它已經過測試。
非常感謝你的朋友@Shyju,我如何在視圖中列出這些數據,我要在模型中創建一個類來做?我怎樣才能在查詢中添加一個參數? –
@JoseLuis:我更新了答案以顯示視圖中的項目。我鼓勵你發佈一個新的問題與相關的細節,而不是在評論中提出。祝你好運。希望這可以幫助。 – Shyju