准备工作:1.使用微软的例子数据库-Northwind,没有的可以到微软挂官网去下,附件到sql server2005数据库中
2.使用微软O/R设计器,将Northwind映射到项目中,以下实例在此环境下进行,使用vs2008
以下为代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using DBClass;//此处为O/R映射Northwind
- using System.Data.Linq;
- using System.Data.Linq.SqlClient;
- namespace Linq_to_Sql_Demo1
- {
- class Program
- {
- static void Main(string[] args)
- {
- LinqForLike();
- }
- #region linq中select语句的使用
- public static void SqlFroSelectOne()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from c in db.Customers where c.City == "London" select new { c.CompanyName, c.City };
- //上下两句表达意思是一样的,上面为标准查询语句,下面为级连表达式
- // var q = db.Customers.Where(c => c.City == "London").Select(c => c.ContactName);
- /* 手动填写数据库对象后的方法
- DataContext dc = new DataContext("server=.//sql2005;database=Northwind;uid=sa;pwd=king_860119");
- var q = from c in dc.GetTable<Customers>() where c.City == "London" select c.CompanyName;
- */
- foreach (var c in q)
- {
- Console.WriteLine(c);
- }
- Console.ReadLine();
- }
- #endregion
- #region linq中select语句的使用2
- public static void SqlFroSelectTwo()
- {
- NorthwindDataContext dc = new NorthwindDataContext();
- var q=from s in dc.Customers select new{城市名称=s.City};
- //在这里相当于声明一个匿名类q,q中存在属性“城市名称”,而其中S为一条条的dc.Customers对象
- //其中“城市名称”这个属性当当与对S.city的重命名一样
- foreach(var a in q)
- {
- Console.WriteLine(a);
- }
- Console.Read();
- }
- #endregion
- #region linq中select语句的使用3
- public static void SqlFroSelectThree()
- {
- NorthwindDataContext dc = new NorthwindDataContext();
- var q=from s in dc.Products select new {s.ProductName,我的条件=s.UnitsInStock-s.UnitsOnOrder<0?"out":"in"};
- foreach(var a in q)
- {
- Console.WriteLine(a);
- }
- Console.Read();
- }
- #endregion
- #region linq中where语句的使用1
- public static void SqlFroWhereOne()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q =
- from p in db.Products
- where p.UnitPrice > 10m || p.Discontinued
- select p;
- foreach (var a in q)
- {
- Console.WriteLine(a.Categories.CategoryID);
- }
- Console.Read();
- }
- #endregion
- #region linq中order语句的使用1
- public static void SqlFroOrderOne()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from s in db.Employees orderby s.EmployeeID descending select new { s.EmployeeID,s.FirstName,s.LastName};
- //orderby子句在select子句前面,与where等子句位置无要求
- foreach (var s in q)
- {
- Console.WriteLine(s.ToString());
- }
- Console.Read();
- }
- #endregion
- #region Linq中GroupBy语句的使用1
- public static void SqlFroGroupByOne()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from p in db.Products group p by p.CategoryID into g select g;
- foreach (var gp in q)
- {
- if (gp.Key == 7)
- {
- foreach (var p in gp)
- {
- //do something
- }
- }
- }
- Console.ReadKey();
- }
- #endregion
- #region Linq中GroupBy语句的使用2
- public static void SqlForGroupByTwo()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from p in db.Products group p by p.CategoryID into g select new { CategoryID = g.Key, g };
- foreach (var gp in q)
- {
- //do something
- }
- }
- #endregion
- #region Linq中GroupBy语句的使用30-聚合函数的使用
- public static void SqlForGroupByThree()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, TotalPrice = g.Sum(p => p.UnitPrice) };
- foreach (var a in q)
- {
- Console.WriteLine(a);
- }
- Console.Read();
- }
- #endregion
- #region Linq中Join语句的使用1
- public static void LinqForJoinOne()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from p in db.Customers join o in db.Orders on p.CustomerID equals o.CustomerID select new { p.CustomerID, o.EmployeeID };
- //下面注释的语句为此句的lambda的写法
- // var q = db.Customers.Join(db.Orders, p => p.CustomerID, o => o.CustomerID, (p, o) => new { p.CustomerID, o.EmployeeID });
- foreach (var s in q)
- {
- Console.WriteLine(s);
- }
- Console.Read();
- }
- #endregion
- #region Linq中In语句的使用
- public static void LinqForInOne()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- string[] customerID_Set = new string[] { "AROUT", "BOLID", "FISSA" };
- var q = from s in db.Orders where customerID_Set.Contains(s.CustomerID) select s.EmployeeID;
- //相当于sql中的in,意思就是从这个in的集合中取出,如果not in 就在集合的前面加上!
- foreach (var a in q)
- {
- Console.WriteLine(a);
- }
- Console.Read();
- }
- #endregion
- #region Linq中Like语句的使用
- public static void LinqForLike()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- //中间部分包含And的
- var q = from s in db.Customers where s.ContactName.Contains("And") select s.ContactName;
- //开头部分包含A的
- var p = from s in db.Customers where s.ContactName.StartsWith("A") select s.ContactName;
- //结束部分包含g的
- var a = from s in db.Customers where s.ContactName.EndsWith("g") select s.ContactName;
- //另外的一种写法,需要命名空间System.Data.Linq.SqlClient
- var c = from s in db.Customers where SqlMethods.Like(s.ContactName, "%g") select s.ContactName;
- foreach (var b in c)
- {
- Console.WriteLine(b);
- }
- Console.Read();
- }
- #endregion
- }
- }
使用O/R映射的数据库实例代码(均为系统自动生成),连接字符在app.config中
附加上增删改的使用
- #region linq中insert语句的使用
- public static void LinqForInsert()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var rgdata = new Region { RegionID = 5, RegionDescription = "test" };
- try
- {
- db.Region.InsertOnSubmit(rgdata);//插入数据
- db.SubmitChanges();//提交更改
- }
- catch (Exception err)
- {
- Console.WriteLine(err.Message);
- }
- Console.Read();
- }
- #endregion
- #region Linq中update语句的使用
- public static void LinqForUpdata()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var o = from c in db.Region where c.RegionID == 5 select c;
- foreach (var item in o)
- {
- if(item.RegionID==5)
- item.RegionDescription = "test改过了";
- }
- db.SubmitChanges();
- }
- #endregion
- #region Linq中del语句的使用
- public static void LinqForDel()
- {
- NorthwindDataContext db = new NorthwindDataContext();
- var q = from c in db.Region where c.RegionID == 5 select c;
- foreach (var item in q)
- {
- db.Region.DeleteOnSubmit(item);
- }
- db.SubmitChanges();
- }
- #endregion