asp.NetMVC+linq to Entity簡単チュートリアル(三)linq to Entityの基本操作
MVCが分かったら、linq to Entityを使います.その基本的な文法はlinq to sqlと似ていますが、いくつかの地方でいくつかの违いがあります.个人的な感じの最大の违いはlinq to sqlにいくつかの机能があります.それはありません.わあ....どうしてそう言うのですか.後ろの操作で、出会ったら、私は言います.
使い慣れたado.ネットの友达にとって、linq to Entityを書くと少し違和感がありますが、どうしてですか.主にSQLの書き方も普通の私たちが普段書いている書き方が少し違うからです.ここでは、時間があれば、SQL-Server 2005の技術の内幕を見て、この本を読むことをお勧めします.第1章では、sql文の実行順序を示します.
次のようになります.
1,From:From句の最初の2つのテーブルに対してデカルト積(クロス結合)を実行し、仮想テーブルVT 1を生成する.
2,ON:VT 1にOnフィルタを適用します.それらだけが本物の行にVT 2を挿入する.
3,Outer(Join):outer join(Cross joinまたはinner joinに対して)が指定されている場合、保持テーブルに一致するローが見つからない場合はVT 2に外部ローとして追加され、VT 3が生成されます.From句に2つのテーブルが含まれている場合は、前の結合で生成された結果テーブルと次のテーブルについて手順1から手順3を繰り返します.すべてのテーブルが処理されるまで.
4,Where:VT 3にwhereフィルタを適用します.TRUEの行にVT 4が挿入する.
5,Group By:Group By句の列リストからVT 4中の行をグループ化し、VT 5を生成する.
6,Cube|Rollup:スーパーグループをVT 5に挿入し、VT 6を生成する.
7,Having:VT 6にHavingフィルタを適用します.TRUEのグループはVT 7に挿入する.
8,Select:selectリストを処理し、VT 8を生成する.
9,Distinct:重複する行をVT 8から削除し,VT 9を生成する.
10,Order by:VT 9の行をorder by句の列リストで並べ替えてカーソル(VC 10)を生成する.
11,Top:VC 10の先頭から指定された数または割合の行を選択し、テーブルVT 11を生成し、呼び出し元に戻る
もしあなたが中の解釈をよく知らないならば、何の関係もありません.あなたは知っている限り、sql文の実行順序は1-11という順序です.このようにlinq to Entityの文法を見ると、あなたはだいぶよくなるかもしれません.
var tab = from t from table
join b from stu on t.id equals b.id
where t.schoolcode==schoolcode && b.sortcode=sortcode
orderby s.id
select new newtable{
id = t.id,
name = b.name
}
私たちはこのlinqの文を見て、order byの文が早めに外に置かれて、他はすべて実行の順序と同じで、このように私たちはよく理解しました.
では、linq to Entityで最も簡単な操作、追加、修正、削除、リストを見てみましょう.
C層にlinq to Entityを書く前に、構築したデータモデルをインスタンス化する必要があります.
アクションの追加
操作の変更
アクションの削除
リスト表示アクション
フロント表示ページ
これらの簡単な操作が使えるようになったら、簡単な伝言板を作っても問題ありません.後でいくつかの実際の応用といくつかの他の方法について説明します.
使い慣れたado.ネットの友达にとって、linq to Entityを書くと少し違和感がありますが、どうしてですか.主にSQLの書き方も普通の私たちが普段書いている書き方が少し違うからです.ここでは、時間があれば、SQL-Server 2005の技術の内幕を見て、この本を読むことをお勧めします.第1章では、sql文の実行順序を示します.
次のようになります.
1,From:From句の最初の2つのテーブルに対してデカルト積(クロス結合)を実行し、仮想テーブルVT 1を生成する.
2,ON:VT 1にOnフィルタを適用します.それらだけが
3,Outer(Join):outer join(Cross joinまたはinner joinに対して)が指定されている場合、保持テーブルに一致するローが見つからない場合はVT 2に外部ローとして追加され、VT 3が生成されます.From句に2つのテーブルが含まれている場合は、前の結合で生成された結果テーブルと次のテーブルについて手順1から手順3を繰り返します.すべてのテーブルが処理されるまで.
4,Where:VT 3にwhereフィルタを適用します.
5,Group By:Group By句の列リストからVT 4中の行をグループ化し、VT 5を生成する.
6,Cube|Rollup:スーパーグループをVT 5に挿入し、VT 6を生成する.
7,Having:VT 6にHavingフィルタを適用します.
8,Select:selectリストを処理し、VT 8を生成する.
9,Distinct:重複する行をVT 8から削除し,VT 9を生成する.
10,Order by:VT 9の行をorder by句の列リストで並べ替えてカーソル(VC 10)を生成する.
11,Top:VC 10の先頭から指定された数または割合の行を選択し、テーブルVT 11を生成し、呼び出し元に戻る
もしあなたが中の解釈をよく知らないならば、何の関係もありません.あなたは知っている限り、sql文の実行順序は1-11という順序です.このようにlinq to Entityの文法を見ると、あなたはだいぶよくなるかもしれません.
var tab = from t from table
join b from stu on t.id equals b.id
where t.schoolcode==schoolcode && b.sortcode=sortcode
orderby s.id
select new newtable{
id = t.id,
name = b.name
}
私たちはこのlinqの文を見て、order byの文が早めに外に置かれて、他はすべて実行の順序と同じで、このように私たちはよく理解しました.
では、linq to Entityで最も簡単な操作、追加、修正、削除、リストを見てみましょう.
C層にlinq to Entityを書く前に、構築したデータモデルをインスタンス化する必要があります.
NewETrainEntities newEtrain = new NewETrainEntities();
アクションの追加
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult CreateSave()
{
//
int flag = 1;
try
{
// Etrain_Announcement model
Etrain_Announcement e_ann = new Etrain_Announcement();
e_ann.schoolcode = Request.Form["hidschoolcode"].ToString();
e_ann.UserType = Request.Form["selIsapp"].ToString();
e_ann.contents = Request.Form["txtContents"].ToString();
e_ann.sendTime = DateTime.Now;
e_ann.createdate = DateTime.Now;
e_ann.modifydate = DateTime.Now;
newEtrain.AddToEtrain_Announcement(e_ann);
// , , add , , savachanges()
newEtrain.SaveChanges();
}
catch (Exception ex)
{
flag = 0;
}
return Content(flag.ToString());
}
操作の変更
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult UpdateSave()
{
//
int flag = 1;
try
{
int annid = Convert.ToInt32(Request.Form["hidid"]);
var info = from ann in newEtrain.Etrain_Announcement
where ann.id == annid
select ann;
// , , foreach 。 ,
foreach (var item in info)
{
item.contents = Request.Form["txtContents"];
}
newEtrain.SaveChanges();
}
catch (Exception ex)
{
flag = 0;
}
return Content(flag.ToString());
}
アクションの削除
/// <summary>
///
/// </summary>
/// <param name="id"> ID</param>
/// <returns></returns>
public ActionResult DeleteInfo(string id)
{
//
int flag = 1;
try
{
int annid = Convert.ToInt32(id);
// , , , , , 。
//var info = from ann in newEtrain.Etrain_Announcement
//where ann.id == annid
//select ann;
Etrain_Announcement info = newEtrain.Etrain_Announcement.First(p=>p.id==annid);
//DeleteObject(object Entity) object , model
newEtrain.DeleteObject(info);
newEtrain.SaveChanges();
}
catch(Exception ex)
{
flag = 0;
}
return Content(flag.ToString());
}
リスト表示アクション
/// <summary>
///
/// </summary>
/// <param name="id"> </param>
/// <returns></returns>
public ActionResult adminIndex(string id)
{
ViewData["schoolcode"] = id;
var annInfo = from ann in newEtrain.Etrain_Announcement
where ann.schoolcode == id
orderby ann.id descending
select ann;
// Take(20) , 20 , Tak() top
return View(annInfo.Take(20));
}
フロント表示ページ
<% foreach (var item in Model)
{ %>
<tr>
<td>
<% if (Html.Encode(item.contents).Length > 10)
{ %>
<a href="/Announcement/UserView/<%=Html.Encode(item.id) %>">
<%= Html.Encode(item.contents).Substring(0, 8)%>...</a>
<%}
else
{ %>
<a href="/Announcement/UserView/<%=Html.Encode(item.id) %>">
<%= Html.Encode(item.contents)%></a>
<%} %>
</td>
<td>
<%= Convert.ToDateTime(Html.Encode(item.sendTime)).ToShortDateString() %>
</div>
</td>
</tr>
<% } %>
これらの簡単な操作が使えるようになったら、簡単な伝言板を作っても問題ありません.後でいくつかの実際の応用といくつかの他の方法について説明します.