LinQ是指集成化查詢語言,通過映射將數據庫內的表名變為C#的類名,將列名作為屬性名,將表的關系作為類的成員對象。O--M--R
O-Object對象
R-Relation關系
M-Mapping映射
LinQ包括:LinQ to SQL,針對SQL的查詢,它是一個帶有可視化的操作界面的ORM工具。
LinQ to Object,用來實現對內存中集合對象的查詢。
LinQ to DataSet,對強類型化或弱類型化的DataSet或獨立的DataTable進行查詢。
LinQ to Entity,對實體框架中EDM定義的實體集合進行查詢。
(一):LinQ to SQL
第一步:建立LinQ2SQL類
添加一個新建項,選擇LinQ to SQL,將用到的表拖進來。
第二步:實例化上下文對象,基本所有操作都是通過上下文對象來進行的。
MyDBDataContext context = new MyDBDataContext();
第三步:操作
一、增加數據:
1.造一個要添加的數據對象:
Info data = new Info(); data.Code = "p211"; data.Name = "石頭"; data.Sex = false; data.Nation = "N001"; data.Birthday = new DateTime(1990, 1, 2);
2.在上下文中注冊上面新造的對象。
context.Info.InsertOnSubmit(data);
3.提交執行
context.SubmitChanges();
二、刪除:
1. 找出要刪除的數據
MyDBDataContext context = new MyDBDataContext(); var q = context.Info.Where(p => p.Code == "p003");
2. 刪除注冊
if (q.Count() > 0) { Info data = q.First(); //注冊 context.Work.DeleteAllOnSubmit(data.Work); context.Family.DeleteAllOnSubmit(data.Family); context.Info.DeleteOnSubmit(data); }
3. 提交執行
context.SubmitChanges();
三、修改:
1. 找出要修改的數據
MyDBDataContext context = new MyDBDataContext(); var q = context.Info.Where(p=>p.Code == "p001");
2. 改,不用注冊
if (q.Count() > 0) { Info data = q.First(); //改 data.Name = "胡生"; data.Nation = "n001"; data.Sex = false; }
3. 提交執行
context.SubmitChanges();
四、查詢:
1.查所有
MyDBDataContext context = new MyDBDataContext(); //所有人員 var q = context.Info; //var q = from p in context.Info select p; //顯示 foreach(Info data in q) { //data.Nation1:當前人員對應的民族對象。 Console.WriteLine(data.Name+"\t"+data.Nation1.Name); //data.Work:當前人員對應的工作記錄集合 foreach (Work work in data.Work) { Console.WriteLine("\t"+work.Firm+"\t"+work.Depart); } }
2. 根據主鍵查詢(條件查詢),默認返回的都是集合。
var q = from p in context.Info where p.Code == "p211" select p; var q = context.Info.Where(p => p.Code == "p211").Where(p => p.Nation1.Name == "漢族"); //Lambda表達式(最最簡化的函數,只有參數和函數體的匿名函數) var q = context.Info.Where(p => p.Code == "p211" && p.Nation1.Name=="漢族"); var q = context.Info.Where(p => p.Code == "p211"); //默認返回的是集合 if (q.Count() > 0) //看看集合中是否查出數據來了 { Info data = q.First(); //取第一個對象出來 Console.WriteLine(data.Nation1.Name + data.Name); }
3. 多條件查詢
var q = from p in context.Car where p.Price > 30 && p.Brand=="b002" select p; var q = context.Car.Where(p => p.Price > 30 && p.Brand == "b002"); var q = context.Car.Where(p => p.Price > 30).Where(p => p.Brand == "b002"); var q = from p in context.Car where p.Price > 30 || p.Brand == "b002" select p; var q = context.Car.Where(p => p.Price > 30 || p.Brand == "b002");
4. 模糊查詢
var q = from p in context.Car where p.Name.Contains("5") select p; //包含 var q = from p in context.Car where p.Name.StartsWith("奧迪") select p;//開頭 var q = from p in context.Car where p.Name.EndsWith("奧迪") select p;//結尾 var q = context.Car.Where(p => p.Name.Contains("5"));//包含 var q = context.Car.Where(p => p.Name.StartsWith("奧迪"));//開頭 var q = context.Car.Where(p => p.Name.EndsWith("型"));//結尾 var q = from p in context.Car where p.Name.Substring(2, 1) == "5" select p;//第三個字符 var q = context.Car.Where(p => p.Name.Substring(2,1) == "5");//第三個字符是5
5. Distinct查詢
var q = (from p in context.Car select p.Brand).Distinct();//去重 var q = context.Car.Select(p=>p.Brand).Distinct();//去重
6. 連接查詢——對象之間的關聯關系點出來的。
var q = context.Car.Where(p => p.Brand1.Productor.Prod_Name=="一汽豐田");
7. 去重查詢出顯示,IEnumerable是集合的根類型
static void Show(IEnumerable<string> q) { foreach (string d in q) { Console.WriteLine(d); } }
8. 統計查詢
MyDBDataContext context = new MyDBDataContext(); //var query = from p in context.Car select p; var query = context.Car;//查出所有 Console.WriteLine(query.Count());//統計個數 Console.WriteLine(query.Max(p => p.Price));//價格的最大值 Console.WriteLine(query.Min(p => p.Price));//價格的最小值 Console.WriteLine(query.Max(p => p.Price * p.Oil));//價格乘以油耗的最大值 Console.WriteLine(query.Sum(p => p.Price));//價格求和 Console.WriteLine(query.Sum(p => p.Price * p.Oil));//價格乘以油耗之後求和 Console.WriteLine(query.Average(p => p.Price));//價格平均值
9. 分頁查詢
//分頁 MyDBDataContext context = new MyDBDataContext(); var query = context.Car.Skip(2 * 4).Take(4);//每頁4條數據,要查第三頁的4條數據,跳過8條取下面4條 Show(query);
10. 排序查詢
//排序 MyDBDataContext context = new MyDBDataContext(); //var query = context.Car.OrderBy(p=>p.Price); //升序 var query = context.Car.OrderByDescending(p => p.Price);//降序 Show(query);
11. 集合操作
//集合操作 MyDBDataContext context = new MyDBDataContext(); var query1 = context.Car.Where(p => p.Brand1.Productor.Prod_Name == "一汽豐田"); var query2 = context.Car.Where(p => p.Price > 30); //交集 var query = query1.Intersect(query2); //並集 //var query = query1.Union(query2); //差集 //var query = query1.Except(query2); //補集 //var query = context.Car.Except(query1); Show(query);
以上是關於LINQ的一些基本用法,LINQ實用起來非常方便,同時功能也很強大,很好用。