(1)//刪除操作
public bool delete()
{
try
{
a_context = new AEntities();
b1 = new Table_1();
//刪除只需要寫主鍵就行了
b1.id = 3;
a_context.Entry<Table_1>(b1).State = EntityState.Deleted;
a_context.SaveChanges();
return true;
}
catch (Exception)
{
return false;
}
}
(2)//修改鏈接字符串
public void upConnetionString()
{
a_context = new AEntities();
//設置或者修改鏈接字符串
a_context.Database.Connection.ConnectionString = "";
}
(3)//查詢
public string each()
{
//最簡單的,通過遍歷表實體把里面的內容取出來
string x = string.Empty;
a_context = new AEntities();
foreach (var tb in a_context.Table_1)
{
x += tb.name;
}
return x;
}
(4)//linq查詢,
public string LinqEach()
{
string bb = string.Empty;
a_context = new AEntities();
//linq表達式,安裝查詢順序寫,一般寫sql語句是 select xx from xx where xxx,但實際在數據庫中語句執行的順序是:
//第一步.from xxx
//第二步.where xxx
//第三步.select xxx
//而按着執行順序來寫語句,則就是linq語法【發音lin ke】
//tb是變量,和foreach中的變量是一個意思
//linq查詢返回值是IQueryable<T>類型,比如這里是IQueryable<Table_1>,但一把是用var表達。IQueryable<T>實現IEnumerable接口,所以可以進行遍歷。
//【linq to EF】
//IQueryable<>接口實現類IQueryable接口,而IQueryable里面沒有數據,但他里面有三個屬性,可以返回查詢結構類型,表達式目錄樹,提供與查詢類型相關聯的查詢程序。這些屬性就可以看出是一個工具,用來從數據庫中查詢數據的。EF框架可以提供多種相關聯的查詢程序,所有可以linq to object
//所有不能把IQueryable<>的var看成是變量,他是接口,連接着想對應的查詢查詢程序,不能緩存的
//因為提供的是程序,所以IQueryable<>是在數據庫端進行過濾,這就是linq to EF
var x = from tb in a_context.Table_1 //用遍歷tb去遍歷EF表:a_context.Table_1
where tb.name == "小明" //這里的where就和if()的判斷是一個意思,判斷是否符合條件,所有里面用的並且或者都用c#得到||額&&等,返回bool類型,通過where在【數據庫端】進行篩選過濾,再把篩選后的結果集加載到內存中來,這是一種高效的語法
select tb; //select 的內容和SQL語句一樣,可以*,
foreach (var tr in x)
{
bb += tr.name +"|"+ tr.id;
}
//【linq to object】
//當linq to object時候,如: a_context.Table_1.ToArray(),返回值類型則變成IEnumerable<out T>,單單只是實現類IEnumerable而已,因為他沒有實現IQueryable接口,無法提供對應的查詢查詢程序,所以只能是在內存中進行查詢過濾
//在內存里進行過濾,linq to object,可以過濾所有繼承類IEnumerable接口的類型。
//可以理解為linq是把內存中的集合/表看成一個數據庫表,用sql語句進行查詢的過程。返回值是可以foreach遍歷的類型。
var x2 = from tb in a_context.Table_1.ToArray() //用遍歷tb去遍歷Array,也可以Dictionary等等,各種反正查詢的是List類型的經典集合,不再是EF這樣的數據庫模型表。是集合...,這是表中的數據全部加載到內存中,如果有1億條數據呢?....
where tb.name == "小明"
select tb;
//linq 可以 to 任何類型
return bb;
}
(5)//lambda查詢
//lambda查詢,linq查詢和lambda在運行階段性能是一樣的。但編譯階段不同而已(一個linq編譯一個lambda編譯),編譯時間慢點久點沒啥關系...所以用這兩個一樣
//這個語法查詢好看點..
public void lambdaEach()
{
a_context =new AEntities();
var dt = a_context.Table_1.Where(u=>u.age>0);
foreach (var u in dt) { }
}
(6)//排序,分頁
public void fenYe()
{
//Skip越過的意思,Take獲取的意思
a_context = new AEntities();
var tb = a_context.Table_1.Where(u => u.age > 0).OrderBy(u => u.id);//默認是升序
var tb2 = a_context.Table_1.Where(u => u.age > 0).OrderByDescending(u => u.id);//這個是降序
//分頁,分頁語句沒有最好,只有最合適具體情況
var tb3 = a_context.Table_1.Where(u => u.age > 0).OrderByDescending(u => u.id).Skip(5 * (3 - 1)).Take(5);//越過(5 * (3 - 1))條,取(5)條
var tb4 = from u in a_context.Table_1
orderby u.id ascending //linq排序
select u;
var tb5 = (from u in a_context.Table_1
orderby u.id ascending
select u).Skip(5 * (3 - 1)).Take(5); //分頁
}
(7)//查詢部分
public void eachBf()
{
a_context = new AEntities();
//linq
var tb = from u in a_context.Table_1
select u.name; //和sql語句一樣,這樣只查詢name的值
var tb2 = from u in a_context.Table_1
select new { u.name, u.id, xx = u.name.Count() }; //查詢多個用new創建匿名函數來用,xx = u.name.Count()獲取行數,只要能點出來就能進行查詢,叼...
//lambda
var tb3 = a_context.Table_1.Where(u => u.age > 0).Select(u => new { u.id,u.name,xx=u.name.Count() });
}
