[傳智播客學習日記]Linq to EF 增刪改查


今天是MVC的課開篇鋪墊,主要講解基礎知識Linq語句、lambda表達式、匿名方法、匿名類。

使用EF(實體框架)可以及其方便地創建和修改SQL數據庫,它封裝了繁瑣的SQL代碼,通過數據庫和對象之間的映射,讓程序員可以完全按照面向對象的思路使用linq語句操縱數據庫中的數據。

首先,在這個例子里,創建ModelStudent.edmx文件,用它建立Student表,里面有Id,Name,Age三項。去掉主鍵的自動增長標識,生成SQL語句,即可創建一個貨真價實數據表!

在ModelStudent.Designer.cs當中有一個類叫ModelStudentContainer,這個類可以看做我們的數據庫,Student類則是這張表對應的類,Student對象就是表中的一行。

接下來看如何進行增刪改查操作,代碼可以拷貝下來,分段試運行。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//創建數據庫實體
ModelStudentContainer DemoDB = new ModelStudentContainer();

#region 增加數據

////創建具體實體(表中一行)
//Student stu1 = new Student()
//{
// ID = 1,
// Name = "張飛",
// Age = 20
//};
//Student stu2 = new Student()
//{
// ID = 2,
// Name = "關羽",
// Age = 21
//};
//Student stu3 = new Student()
//{
// ID = 3,
// Name = "趙雲",
// Age = 22
//};
//Student stu4 = new Student()
//{
// ID = 4,
// Name = "劉備",
// Age = 23
//};
//Student stu5 = new Student()
//{
// ID = 5,
// Name = "劉表",
// Age = 24
//};
//Student stu6 = new Student()
//{
// ID = 6,
// Name = "劉禪",
// Age = 25
//};

////將實體stu添加到數據庫實體對象中
//DemoDB.Student.AddObject(stu1);
//DemoDB.Student.AddObject(stu2);
//DemoDB.Student.AddObject(stu3);
//DemoDB.Student.AddObject(stu4);
//DemoDB.Student.AddObject(stu5);
//DemoDB.Student.AddObject(stu6);

////保存對數據庫的修改
//DemoDB.SaveChanges();

#endregion

#region 查詢1:一般查詢,查詢所有數據

//var result = from u in DemoDB.Student
// select u;

//foreach (var item in result)
//{
// Console.WriteLine("ID:{0},姓名:{1},年齡:{2}。", item.ID, item.Name, item.Age);
//}

#endregion

#region 查詢2:使用ToList防止延遲加載,拆分子查詢

////這個查詢結果可以保存到服務器內存中
//var result1 = (from u in DemoDB.Student
// where u.Age >= 22
// select u).ToList<Student>();

//var result2 = from u in result1
// where u.Name != "趙雲"
// select u;

//foreach (var item in result2)
//{
// Console.WriteLine("ID:{0},姓名:{1},年齡:{2}。", item.ID, item.Name, item.Age);
//}

#endregion

#region 查詢3:使用Where方法(lambda表達式)

////使用了Where泛型方法,要傳入一個lambda表達式
//var result = DemoDB.Student
// .Where<Student>(t => t.ID == 1);

//foreach (var item in result)
//{
// Console.WriteLine("ID:{0},姓名:{1},年齡:{2}。", item.ID, item.Name, item.Age);
//}

#endregion

#region 查詢4:Linq分頁查詢

////要跳過多少頁
//int skipPage;
////每頁兩條數據
//int countPerPage=2;

////從跳過0頁到跳過2頁(輸出第1-3頁)
//for (skipPage = 0; skipPage <= 2; skipPage++)
//{
// var result = DemoDB.Student
////分頁必須排序
// .OrderBy(t => t.ID)
////跳過指定頁數
// .Skip<Student>(skipPage * countPerPage)
////獲取條數
// .Take<Student>(countPerPage);

// Console.WriteLine("第{0}頁:", skipPage + 1);
////輸出查詢結果(該頁)
// foreach (var item in result)
// {
// Console.WriteLine("ID:{0},姓名:{1},年齡:{2}。", item.ID, item.Name, item.Age);
// }

// Console.WriteLine();
//}

#endregion

#region 查詢5:使用匿名類查詢多個字段

//var result = from p in DemoDB.Student
// where p.ID < 4
////定義一個包含了ID和Name信息的匿名類
// select new { p.ID, p.Name };

//foreach (var item in result)
//{
////這里無法輸出年齡
// Console.WriteLine("ID:{0},姓名:{1}。", item.ID, item.Name);
//}

#endregion

#region 修改1:修改1條記錄

////這里沒有寫where字句,會查詢出4條記錄
//var result = from u in DemoDB.Student
// select u;

////但是這個方法一次只能取出一條記錄
////注:First方法如果返回空值則拋異常
//var target = result.FirstOrDefault<Student>();
////所以只修改了查詢結果集中的第一條記錄
//target.Name = "司馬懿";

//DemoDB.SaveChanges();

#endregion

#region 修改2:修改多條記錄

//var result = from u in DemoDB.Student
// select u;

////使用循環方式,修改所有查詢到的記錄
//foreach (var item in result)
//{
// item.Age = 10;
//}

//DemoDB.SaveChanges();

#endregion

#region 刪除

//var result = from u in DemoDB.Student
// where u.Name == "關羽"
// select u;

////刪除所有查詢結果(這里只有一條結果)
//foreach (var item in result)
//{
// DemoDB.Student.DeleteObject(item);
//}

//DemoDB.SaveChanges();

#endregion

Console.WriteLine("執行完畢!");
Console.ReadKey();
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM