1. 程式人生 > >利用LinQ技術和lambd表達式進行增刪改查

利用LinQ技術和lambd表達式進行增刪改查

有效 common 實體 tool try linq default 普通查詢 tor

數據庫訪問技術:

  ADO.net

  EF框架

  LinQ

LinQ是一種高集成化的數據庫訪問技術,他將數據庫中的表映射成程序中的類

  數據庫的表名變成類名

  數據庫的列名變成字段名/屬性名

所有的操作都是通過LinQ自動生成的一個上下文對象來進行操作的,這個對象名是LinQ的名字+"DataContext" ,一個數據庫對應一個LinQ

1、創建LinQ

  在項目上右鍵,添加一個LinQ to SQL

技術分享

  然後點擊服務器資源管理器,選擇小插頭樣式的連接到數據庫

技術分享

  正確填寫需要連接的數據庫信息,點擊確定,然後在左邊就可以看到數據庫結構,將需要的表直接拖動到界面上即可

2、去除數據訪問類的簡便開發方式

  使用LinQ時,可以不寫數據訪問類,直接在程序用調用,這樣既省時間,也節省內存

  使用方法:using(實例化上下文對象){}

using (Data0928DataContext con = new Data0928DataContext())
            {
                Repeater1.DataSource = con.Users.ToList();
                Repeater1.DataBind();
            }

3、查詢、條件查詢

  普通查詢:查詢全部只需一句代碼

con.Users.Tolist()

  條件查詢:需要使用Lambda表達式

  註意:不管結果有幾條數據,返回的都是集合,使用FirstOrDefault取第一個值,並且如果為空不會報錯,會返回null

Users u = con.Users.Where(r => r.ids == ids).FirstOrDefault();

4、刪除

  刪除方法需要一個對象,需要先通過條件查詢查出此對象才能進行刪除,並且需要SubmitChanges方法才是正式執行方法

con.Users.DeleteOnSubmit(con.Users.Where(r => r.ids == ids).FirstOrDefault());
con.SubmitChanges();

5、修改

  修改不需要想ADO.net中那樣需要寫很長的字符串,只需要查出需要修改的對象,對這個對象的屬性直接修改,修改完畢執行SubmitChanges方法提交即可

技術分享
Users u = con.Users.Where(r => r.UserName ==         username.Text).FirstOrDefault();
                u.PassWord = password.Text;
                u.NickName = nickname.Text;
                if (RadioButton1.Checked)
                    u.Sex = true;
                else
                    u.Sex = false;
                u.Birthday = Convert.ToDateTime(birthday.Text);
                u.Nation = DropDownList1.SelectedValue;
                u.Class = DropDownList2.SelectedValue;
                try
                {
                    con.SubmitChanges();
                    Response.Redirect("Index.aspx");
                }
                catch {
                    Label1.Text = "修改失敗!";
                }        
技術分享

6、屬性擴展

  VS允許用戶對LinQ生成的實體類進行擴展,只需要創建一個跟實體類相同名的類,寫上partial,即可在此類裏面寫自己需要的屬性。

  直接在LinQ生成的文件中寫也有效,但是如果對LinQ執行任何修改,哪怕只是拖動一下界面的表位置,也會導致代碼重新生成,這樣自己寫進去的屬性擴展就會消失,所以只能通過新建一個同名partial類進行添加

技術分享
public partial class Users
{
    public string SexStr
    {
        get
        {
            string end = "<無數據>";
            if (this._Sex != null)
            {
                end = Convert.ToBoolean(this._Sex) ? "images/1.png" : "images/0.png";
            }
            return end;
        }
    }
    public string NationName
    {
        get
        {
            return Nation1.NationName;
        }
    }

    public string ClassName
    {
        get
        {
            return Class1.ClassName;
        }
    }
}
技術分享

利用LinQ技術和lambd表達式進行增刪改查