これは単なるサンプルです。(テスト済みで動作中)。つまりGetUniversities
、コントローラー クラス内にメソッドを保持しています。GetUniversities
多くの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 のリストを返すことに注意してください。カスタム ドメイン エンティティではありません。Entity Framework は Domain Entities のリストを提供しています。したがって、カスタム SQL の場合、データ行をカスタム オブジェクトのインスタンスにマップする必要があります。
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);
}
Name
これにより、2 つのプロパティを持つ匿名型のリストが得られますCampusName
。Name と CampusName がクエリの結果に存在する 2 つの列であると仮定します。
EDIT2:コメントに従って、これらのデータをビューにリストするには、 Viewsフォルダーの下のコントローラー(このアクションメソッドを記述した場所)フォルダー内にIndexというビューを作成します。強く型付けされたビューにする必要があります。ちょっと待って!ビューに渡す型は何ですか?
結果は匿名型です。この場合、ViewModel を作成し、匿名の代わりに、ViewModel のリストを返します。
public class UniversityViewModel
{
public string UniversityName { set;get;}
public string CampusName { set;get;}
}
次に、Index アクションのコードを次のように更新します。
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 のコレクションに厳密に型指定されています。いつものように、それをループして表示しています。これはうまくいくはずです。テスト済みです。