1、LINQtoSQL语法及实例大全LINQ To SQL 语法及实例大全2011/4/5目录LINQ to SQL语句(1)之Where 2Where操作 21.简单形式: 22.关系条件形式: 23.First()形式: 3LINQ to SQL语句(2)之Select/Distinct 31.简单用法: 42.匿名类型 形式: 43.条件形式: 54.指定类 型形式: 65.筛选形式: 66.shaped形式(整形类型): 67.嵌套类型形式: 78.本地方法调用 形式(LocalMethodCall): 79.Distinct形式: 8LINQ to SQL语句(3)之Count/Sum/
2、Min/Max/Avg 91.简单形式: 92.带条件形 式: 91.简单形式: 102.映射形式: 103.元素 : 111.简单形式: 112.映射形式: 113.元素: 111.简单形式: 122.映射形式: 123.元素: 12LINQ to SQL语句(4)之Join 13Join操作符 131.一对多关系(1 to Many): 132.多对多关系(Many to Many): 143.自联接关系: 151.双向联接(Two way join): 152.三向联接(There way join): 163.左外部联接(Left Outer Join): 174.投影的Let赋值(P
3、rojected let assignment): 175.组合键(Composite Key): 186.可为null/不可为null的键关系 (Nullable/Nonnullable Key Relationship): 19LINQ to SQL语句(5)之Order By 19Order By操作 191.简单形式 192.带条件形式 203.降序排序 204.ThenBy 205.ThenByDescending 226. 带GroupBy形式 22LINQ to SQL语句(6)之Group By/Having 23Group By/Having操作符 231.简单形式: 232
4、.Select匿名类 : 243.最大 值 254.最小 值 265.平均 值 266.求和 267.计数 278.带条件计数 279.Where限制 2810.多列(Multiple Columns) 2811.表达式(Expression) 29LINQ to SQL语句(7)之Exists/In/Any/All/Contains 29Exists/In/Any/All/Contains操作符 29Any 291.简单形式: 292.带条件形式: 30All 30Contains 311.包含一个对象: 312.包含多个值: 32LINQ to SQL语句(8)之Concat/Union/
5、Intersect/Except 32Concat/Union/Intersect/Except操作 32Concat(连接) 321.简单形式: 332.复 合形式: 33Union(合并) 33Intersect(相交) 34Except(与非) 34LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods 35Top/Bottom操作 35Take 35Skip 35TakeWhile 36SkipWhile 36Paging(分页)操作 361.索引 362.按唯一键排序 36SqlMethods操作 37Like 37已编译查 询操作(Compile
6、d Query) 38LINQ to SQL语句(10)之Insert 38插入(Insert)1.简单形式 382.一对多 关系 393.多对多关系 394.使用动态CUD重写(Override using Dynamic CUD) 40LINQ to SQL语句(11)之Update 41更新(Update) 411.简单形式 412.多项更改 41LINQ to SQL语句(12)之Delete和使用Attach 42删除(Delete)1.简单形式 422.一对多关系 423.推理删除(Inferred Delete) 43使用Attach更新(Update with Attach)
7、43LINQ to SQL语句(13)之开放式并发控制和事务 46Simultaneous Changes开放式并发控制 46开放式并发(Optimistic Concurrency) 461.Implicit(隐式) 482.Explicit(显式) 48LINQ to SQL语句(14)之Null语义和DateTime 49Null语义 491.Null 492.Nullable.HasValue 50日期函数 501.DateTime.Year 512.DateTime.Month 513.DateTime.Day 51LINQ to SQL语句(15)之String 51字符串(Str
8、ing) 511.字符 串串联(String Concatenation) 522.String.Length 523.String.Contains(substring) 524.String.IndexOf(substring) 525.String.StartsWith (prefix) 536.String.EndsWith(suffix) 537.String.Substring(start) 538.String.Substring (start, length) 539.String.ToUpper() 5410.String.ToLower() 5411.String.Trim
9、() 5412.String.Insert(pos, str) 5413.String.Remove(start) 5514.String.Remove(start, length) 5515.String.Replace(find, replace) 55LINQ to SQL语句(16)之对象标识 56对象标识 56对象缓存 56LINQ to SQL语句(17)之对象加载 57对象加载延迟加载 57预先加载:LoadWith 方法 58LINQ to SQL语句(18)之运算符转换 591.AsEnumerable:将类型转换为泛型 IEnumerable 592.ToArray:将序列
10、转换为数组 593.ToList:将序列转换为 泛型列表 594.ToDictionary:将序 列转化为字典 60LINQ to SQL语句(19)之ADO.NET与LINQ to SQL 601.连接 612.事务 61LINQ to SQL语句(20)之存储过程 631.标量返回 632.单一结 果集 643.多个可 能形状的单一结果集 654.多个结果集 705.带输出参数 79LINQ to SQL语句(21)之用户定义函数 801.在Select中使用用户定义的标量函数 802.在Where从句中 使用用户定义的标量函数 813.使用用户定义的表值函数 834.以联接方式使用用户定
11、义的表值函数 84LINQ to SQL语句(22)之DataContext 85创建和删除数据库 85数据库验证 88数据库更改 88动态查询 89日志 90LINQ to SQL语句(23)之动态查询 901.Select 912.Where 92LINQ to SQL语句(24)之视图 94LINQ to SQL语句(25)之继承 961.一般形式 972.OfType形式 983.IS形式 984.AS形式 995.Cast形式 996.UseAsDefault形式 1007.插入新的记录 101LINQ to SQL语句(1)之WhereWhere操作适用场景:实现过滤,查询等功能。
12、说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的 ,而判断条件就是它后面所接的子句。Where操作包括3种形式,分别为简单形式、关系条件形式、First()形式。下 面分别用实例举例下:1.简单形式:例如:使用where筛选在伦敦的客户var q =from c in db.Customerswhere c.City = Londonselect c;再如:筛选1994 年或之后雇用的雇员:var q =from e in db.Employeeswhere e.HireDate = new DateTime(1994, 1, 1)select e;2.关系条件形式:
13、筛选库存量在订货点水平之下但未断货的产品:var q =from p in db.Productswhere p.UnitsInStock 10m | p.Discontinuedselect p;下面这个例子是调用两次where以筛选出UnitPrice大于10且已停产的产品。var q =db.Products.Where(p=p.UnitPrice 10m).Where (p=p.Discontinued);3.First()形式:返回集合中的一个元素,其实质就是在SQL语句中加TOP (1)。简单用法:选择表中的第一个发货方。Shipper shipper = db.Shippers.
14、First();元素:选择CustomerID 为“BONAP”的单个客户Customer cust = db.Customers.First(c = c.CustomerID = BONAP);条件:选择运费大于 10.00 的订单:Order ord = db.Orders.First(o = o.Freight 10.00M);LINQ to SQL语句(2)之Select/Distinct1 Select介绍12 Select介绍23 Select介绍3和 Distinct介绍Select/Distinct操作符适用场景:o(_) o 查询呗。说明:和SQL命令中的select作用相似
15、但位置不同, 查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结 果返回回来;延迟。Select/Distinct操作包括9种形式,分别为简单用 法、匿名类型形式、条件形式、指定类型形式、筛选形式、整形类型形式、嵌套 类型形式、本地方法调用形式、Distinct形式。1.简单用法:这个示 例返回仅含客户联系人姓名的序列。var q =from c in db.Customersselect c.ContactName;注意:这个语句 只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的 时候,它才会执行这个语句,这就是延迟加载(deferred lo
16、ading)。如果,在声 明的时候就返回的结果集是对象的集合。你可以使用ToList() 或ToArray()方法 把查询结果先进行保存,然后再对这个集合进行查询。当然延迟加载(deferred loading)可以像拼接SQL语句那样拼接查询语法,再执行它。2.匿名类型 形式:说明:匿名类型是C#3.0中新特性。其实质是编译器根据我们自定义自 动产生一个匿名的类来帮助我们实现临时变量的储存。匿名类型还依赖于另外一 个特性:支持根据property来创建对象。比如,var d = new Name = s ;编译器自动产生一个有property叫做Name的匿名类,然后按这 个类型分配内存,并
17、初始化对象。但是var d = new s;是编译不 通过的。因为,编译器不知道匿名类中的property的名字。例如string c = d;var d = new c; 则是可以通过编译的。编译器会创建一个叫 做匿名类带有叫c的property。例如下例:new c,ContactName,c.Phone;ContactName和Phone都是在映射文件中定义与表中字 段相对应的property。编译器读取数据并创建对象时,会创建一个匿名类,这个 类有两个属性,为ContactName和Phone,然后根据数据初始化对象。另外编译器 还可以重命名property的名字。var q =fro
18、m c in db.Customersselect new c.ContactName, c.Phone;上 面语句描述:使用 SELECT 和匿名类型返回仅含客户联系人姓名和电话号码的序 列var q =from e in db.Employeesselect newName = e.FirstName + + e.LastName,Phone = e.HomePhone;上面 语句描述:使用SELECT和匿名类型返回仅含雇员姓名和电话号码的序列,并将 FirstName和LastName字段合并为一个字段“Name”,此外在所得的 序列中将HomePhone字段重命名为Phone。var
19、q =from p in db.Productsselect new p.ProductID,HalfPrice = p.UnitPrice / 2 /给定值 ;上面语句描述:使用SELECT和匿名类型返回所有产品的ID以及 HalfPrice(设置为产品单价除以2所得的值)的序列。3.条件形式:说 明:生成SQL语句为:case when condition then else。var q =from p in db.Productsselect newp.ProductName,Availability = p.UnitsInStock - p.UnitsOnOrder 0.0 selec
20、t od,FreeShippingDiscount = o.Freight;语句描述:使用嵌套查询返回所有订单及其OrderID 的序列 、打折订单中项目的子序列以及免送货所省下的金额。8.本地方法调用 形式(LocalMethodCall):这个例子在查询中调用本地方法 PhoneNumberConverter将电话号码转换为国际格式。var q = from c in db.Customers where c.Country = UK | c.Country = USA select new c.CustomerID, c.CompanyName, Phone = c.Phone, Int
21、ernationalPhone = PhoneNumberConverter(c.Country, c.Phone) ;/电话号码转为国际格式 并且重命名PhoneNumberConverter方法如下:public string PhoneNumberConverter(string Country, string Phone)Phone = Phone.Replace( , ).Replace (), )-);switch (Country) case USA:return 1- + Phone;case UK: return 44- + Phone;default: return Pho
22、ne;下面也是使用了这个方法将电 话号码转换为国际格式并创建XDocumentXDocument doc = new XDocument(new XElement(Customers, from c in db.Customerswhere c.Country = UK | c.Country = USAselect (new XElement (Customer,new XAttribute (CustomerID, c.CustomerID),new XAttribute(CompanyName, c.CompanyName), new XAttribute(InterationalPho
23、ne, PhoneNumberConverter(c.Country, c.Phone) );9.Distinct形式:说明:筛选字段中不相同的值 。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT City FROM Customersvar q = (from c in db.Customersselect c.City ).Distinct();语句描述:查询顾 客覆盖的国家。LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg1 Count/Sum讲解2 Min讲解3 Max讲解4 Average和Aggregate讲解Count/Sum
24、/Min/Max/Avg操作符适用场景: 统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。Count说明:返回集合中的元素个数,返回INT类型;不延迟。生成 SQL语句为:SELECT COUNT(*) FROM1.简单形式:得到数据库中客户 的数量:var q = db.Customers.Count();/总记录数2.带条件形 式:得到数据库中未断货产品的数量:var q = db.Products.Count(p = !p.Discontinued);/条件放在括号中LongCount说明 :返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可 视情
25、况可以选用LongCount来统计元素个数,它返回long类型,比较精确。生成 SQL语句为:SELECT COUNT_BIG(*) FROMvar q = db.Customers.LongCount();Sum说明:返回集合中数值类型元素 之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM() FROM1.简单形式:得到所有订单的总运费:var q = db.Orders.Select(o = o.Freight).Sum();db.Order.select :筛选db.Order.where:筛选2.映射形式:得 到所有产品的订货总数:var q = db.Products.Sum(p = p.UnitsOnOrder);Min说明:返回集合中元素的最小值;不延迟。 生成SQL语句为:SELECT MIN() FROM1.简单形式:查找任 意产品的最低单价:var q = db.Products.Select(p = p.UnitPrice).Min();2.映射形式:查找任意订单的最低运费:var q = db.Orders.Min(o = o.Freight);条件直接放在括号后面3.元素 :查找每个类别中单价最低的产品:var categories =from p in db
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1