LINQtoSQL语法及实例大全.docx
- 文档编号:27014985
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:135
- 大小:149.92KB
LINQtoSQL语法及实例大全.docx
《LINQtoSQL语法及实例大全.docx》由会员分享,可在线阅读,更多相关《LINQtoSQL语法及实例大全.docx(135页珍藏版)》请在冰豆网上搜索。
LINQtoSQL语法及实例大全
LINQToSQL语法及实例大全
2011/4/5
目录
LINQtoSQL语句
(1)之Where2
Where操作2
1.简单形式:
2
2.关系条件形式:
2
3.First()形式:
3
LINQtoSQL语句
(2)之Select/Distinct3
1.简单用法:
4
2.匿名类型形式:
4
3.条件形式:
5
4.指定类型形式:
6
5.筛选形式:
6
6.shaped形式(整形类型):
6
7.嵌套类型形式:
7
8.本地方法调用形式(LocalMethodCall):
7
9.Distinct形式:
8
LINQtoSQL语句(3)之Count/Sum/Min/Max/Avg9
1.简单形式:
9
2.带条件形式:
9
1.简单形式:
10
2.映射形式:
10
3.元素:
11
1.简单形式:
11
2.映射形式:
11
3.元素:
11
1.简单形式:
12
2.映射形式:
12
3.元素:
12
LINQtoSQL语句(4)之Join13
Join操作符13
1.一对多关系(1toMany):
13
2.多对多关系(ManytoMany):
14
3.自联接关系:
15
1.双向联接(Twowayjoin):
15
2.三向联接(Therewayjoin):
16
3.左外部联接(LeftOuterJoin):
17
4.投影的Let赋值(Projectedletassignment):
17
5.组合键(CompositeKey):
18
6.可为null/不可为null的键关系(Nullable/NonnullableKeyRelationship):
19
LINQtoSQL语句(5)之OrderBy19
OrderBy操作19
1.简单形式19
2.带条件形式20
3.降序排序20
4.ThenBy20
5.ThenByDescending22
6.带GroupBy形式22
LINQtoSQL语句(6)之GroupBy/Having23
GroupBy/Having操作符23
1.简单形式:
23
2.Select匿名类:
24
3.最大值25
4.最小值26
5.平均值26
6.求和26
7.计数27
8.带条件计数27
9.Where限制28
10.多列(MultipleColumns)28
11.表达式(Expression)29
LINQtoSQL语句(7)之Exists/In/Any/All/Contains29
Exists/In/Any/All/Contains操作符29
Any29
1.简单形式:
29
2.带条件形式:
30
All30
Contains31
1.包含一个对象:
31
2.包含多个值:
32
LINQtoSQL语句(8)之Concat/Union/Intersect/Except32
Concat/Union/Intersect/Except操作32
Concat(连接)32
1.简单形式:
33
2.复合形式:
33
Union(合并)33
Intersect(相交)34
Except(与非)34
LINQtoSQL语句(9)之Top/Bottom和Paging和SqlMethods35
Top/Bottom操作35
Take35
Skip35
TakeWhile36
SkipWhile36
Paging(分页)操作36
1.索引36
2.按唯一键排序36
SqlMethods操作37
Like37
已编译查询操作(CompiledQuery)38
LINQtoSQL语句(10)之Insert38
插入(Insert)1.简单形式38
2.一对多关系39
3.多对多关系39
4.使用动态CUD重写(OverrideusingDynamicCUD)40
LINQtoSQL语句(11)之Update41
更新(Update)41
1.简单形式41
2.多项更改41
LINQtoSQL语句(12)之Delete和使用Attach42
删除(Delete)1.简单形式42
2.一对多关系42
3.推理删除(InferredDelete)43
使用Attach更新(UpdatewithAttach)43
LINQtoSQL语句(13)之开放式并发控制和事务46
SimultaneousChanges开放式并发控制46
开放式并发(OptimisticConcurrency)46
1.Implicit(隐式)48
2.Explicit(显式)48
LINQtoSQL语句(14)之Null语义和DateTime49
Null语义49
1.Null49
2.Nullable
日期函数50
1.DateTime.Year51
2.DateTime.Month51
3.DateTime.Day51
LINQtoSQL语句(15)之String51
字符串(String)51
1.字符串串联(StringConcatenation)52
2.String.Length52
3.String.Contains(substring)52
4.String.IndexOf(substring)52
5.String.StartsWith(prefix)53
6.String.EndsWith(suffix)53
7.String.Substring(start)53
8.String.Substring(start,length)53
9.String.ToUpper()54
10.String.ToLower()54
11.String.Trim()54
12.String.Insert(pos,str)54
13.String.Remove(start)55
14.String.Remove(start,length)55
15.String.Replace(find,replace)55
LINQtoSQL语句(16)之对象标识56
对象标识56
对象缓存56
LINQtoSQL语句(17)之对象加载57
对象加载延迟加载57
预先加载:
LoadWith方法58
LINQtoSQL语句(18)之运算符转换59
1.AsEnumerable:
将类型转换为泛型IEnumerable59
2.ToArray:
将序列转换为数组59
3.ToList:
将序列转换为泛型列表59
4.ToDictionary:
将序列转化为字典60
LINQtoSQL语句(19)之ADO.NET与LINQtoSQL60
1.连接61
2.事务61
LINQtoSQL语句(20)之存储过程63
1.标量返回63
2.单一结果集64
3.多个可能形状的单一结果集65
4.多个结果集70
5.带输出参数79
LINQtoSQL语句(21)之用户定义函数80
1.在Select中使用用户定义的标量函数80
2.在Where从句中使用用户定义的标量函数81
3.使用用户定义的表值函数83
4.以联接方式使用用户定义的表值函数84
LINQtoSQL语句(22)之DataContext85
创建和删除数据库85
数据库验证88
数据库更改88
动态查询89
日志90
LINQtoSQL语句(23)之动态查询90
1.Select91
2.Where92
LINQtoSQL语句(24)之视图94
LINQtoSQL语句(25)之继承96
1.一般形式97
2.OfType形式98
3.IS形式98
4.AS形式99
5.Cast形式99
6.UseAsDefault形式100
7.插入新的记录101
LINQtoSQL语句
(1)之Where
Where操作
适用场景:
实现过滤,查询等功能。
说明:
与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。
Where操作包括3种形式,分别为简单形式、关系条件形式、First()形式。
下面分别用实例举例下:
1.简单形式:
例如:
使用where筛选在伦敦的客户
varq=
fromcindb.Customers
wherec.City=="London"
selectc;
再如:
筛选1994年或之后雇用的雇员:
varq=
fromeindb.Employees
wheree.HireDate>=newDateTime(1994,1,1)
selecte;
2.关系条件形式:
筛选库存量在订货点水平之下但未断货的产品:
varq=
frompindb.Products
wherep.UnitsInStock<=p.ReorderLevel&&!
p.Discontinued
selectp;
筛选出UnitPrice大于10或已停产的产品:
varq=
frompindb.Products
wherep.UnitPrice>10m||p.Discontinued
selectp;
下面这个例子是调用两次where以筛选出UnitPrice大于10且已停产的产品。
varq=
db.Products.Where(p=>p.UnitPrice>10m).Where(p=>p.Discontinued);
3.First()形式:
返回集合中的一个元素,其实质就是在SQL语句中加TOP
(1)。
简单用法:
选择表中的第一个发货方。
Shippershipper=db.Shippers.First();
元素:
选择CustomerID为“BONAP”的单个客户
Customercust=db.Customers.First(c=>c.CustomerID=="BONAP");
条件:
选择运费大于10.00的订单:
Orderord=db.Orders.First(o=>o.Freight>10.00M);
LINQtoSQL语句
(2)之Select/Distinct
[1]Select介绍1
[2]Select介绍2
[3]Select介绍3和Distinct介绍
Select/Distinct操作符
适用场景:
o(∩_∩)o…查询呗。
说明:
和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来;延迟。
Select/Distinct操作包括9种形式,分别为简单用法、匿名类型形式、条件形式、指定类型形式、筛选形式、整形类型形式、嵌套类型形式、本地方法调用形式、Distinct形式。
1.简单用法:
这个示例返回仅含客户联系人姓名的序列。
varq=
fromcindb.Customers
selectc.ContactName;
注意:
这个语句只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的时候,它才会执行这个语句,这就是延迟加载(deferredloading)。
如果,在声明的时候就返回的结果集是对象的集合。
你可以使用ToList()或ToArray()方法把查询结果先进行保存,然后再对这个集合进行查询。
当然延迟加载(deferredloading)可以像拼接SQL语句那样拼接查询语法,再执行它。
2.匿名类型形式:
说明:
匿名类型是C#3.0中新特性。
其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。
匿名类型还依赖于另外一个特性:
支持根据property来创建对象。
比如,vard=new{Name="s"};编译器自动产生一个有property叫做Name的匿名类,然后按这个类型分配内存,并初始化对象。
但是vard=new{"s"};是编译不通过的。
因为,编译器不知道匿名类中的property的名字。
例如stringc="d";vard=new{c};则是可以通过编译的。
编译器会创建一个叫做匿名类带有叫c的property。
例如下例:
new{c,ContactName,c.Phone};ContactName和Phone都是在映射文件中定义与表中字段相对应的property。
编译器读取数据并创建对象时,会创建一个匿名类,这个类有两个属性,为ContactName和Phone,然后根据数据初始化对象。
另外编译器还可以重命名property的名字。
varq=
fromcindb.Customers
selectnew{c.ContactName,c.Phone};
上面语句描述:
使用SELECT和匿名类型返回仅含客户联系人姓名和电话号码的序列
varq=
fromeindb.Employees
selectnew
{
Name=e.FirstName+""+e.LastName,
Phone=e.HomePhone
};
上面语句描述:
使用SELECT和匿名类型返回仅含雇员姓名和电话号码的序列,并将FirstName和LastName字段合并为一个字段“Name”,此外在所得的序列中将HomePhone字段重命名为Phone。
varq=
frompindb.Products
selectnew
{
p.ProductID,
HalfPrice=p.UnitPrice/2//给定值
};
上面语句描述:
使用SELECT和匿名类型返回所有产品的ID以及HalfPrice(设置为产品单价除以2所得的值)的序列。
3.条件形式:
说明:
生成SQL语句为:
casewhenconditionthenelse。
varq=
frompindb.Products
selectnew
{
p.ProductName,
Availability=
p.UnitsInStock-p.UnitsOnOrder<0?
"OutOfStock":
"InStock"//给定值
};
上面语句描述:
使用SELECT和条件语句返回产品名称和产品供货状态的序列。
4.指定类型形式:
?
?
?
?
?
?
说明:
该形式返回你自定义类型的对象集。
varq=
fromeindb.Employees
selectnewName
{
FirstName=e.FirstName,
LastName=e.LastName
};
上面语句描述:
使用SELECT和已知类型返回雇员姓名的序列。
5.筛选形式:
说明:
结合where使用,起到过滤作用。
varq=
fromcindb.Customers
wherec.City=="London"
selectc.ContactName;
上面语句描述:
使用SELECT和WHERE返回仅含伦敦客户联系人姓名的序列。
6.shaped形式(整形类型):
说明:
其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象。
varq=
fromcindb.Customers
selectnew{
c.CustomerID,
CompanyInfo=new{c.CompanyName,c.City,c.Country},
ContactInfo=new{c.ContactName,c.ContactTitle}
};
语句描述:
使用SELECT和匿名类型返回有关客户的数据的整形子集。
查询顾客的ID和公司信息(公司名称,城市,国家)以及联系信息(联系人和职位)。
7.嵌套类型形式:
说明:
返回的对象集中的每个对象DiscountedProducts属性中,又包含一个集合。
也就是每个对象也是一个集合类。
varq=
fromoindb.Orders
selectnew{
o.OrderID,
DiscountedProducts=
fromodino.OrderDetails
whereod.Discount>0.0
selectod,
FreeShippingDiscount=o.Freight
};
语句描述:
使用嵌套查询返回所有订单及其OrderID的序列、打折订单中项目的子序列以及免送货所省下的金额。
8.本地方法调用形式(LocalMethodCall):
这个例子在查询中调用本地方法PhoneNumberConverter将电话号码转换为国际格式。
varq=fromcindb.Customers
wherec.Country=="UK"||c.Country=="USA"
selectnew
{
c.CustomerID,
c.CompanyName,
Phone=c.Phone,
InternationalPhone=
PhoneNumberConverter(c.Country,c.Phone)
};
//电话号码转为国际格式并且重命名
PhoneNumberConverter方法如下:
publicstringPhoneNumberConverter(stringCountry,stringPhone)
{
Phone=Phone.Replace("","").Replace(")",")-");
switch(Country)
{
case"USA":
return"1-"+Phone;
case"UK":
return"44-"+Phone;
default:
returnPhone;
}
}
下面也是使用了这个方法将电话号码转换为国际格式并创建XDocument
XDocumentdoc=newXDocument(
newXElement("Customers",fromcindb.Customers
wherec.Country=="UK"||c.Country=="USA"
select(newXElement("Customer",
newXAttribute("CustomerID",c.CustomerID),
newXAttribute("CompanyName",c.CompanyName),
newXAttribute("InterationalPhone",
PhoneNumberConverter(c.Country,c.Phone))
))));
9.Distinct形式:
说明:
筛选字段中不相同的值。
用于查询不重复的结果集。
生成SQL语句为:
SELECTDISTINCT[City]FROM[Customers]
varq=(
fromcindb.Customers
selectc.City)
.Distinct();
语句描述:
查询顾客覆盖的国家。
LINQtoSQL语句(3)之Count/Sum/Min/Max/Avg
[1]Count/Sum讲解
[2]Min讲解
[3]Max讲解
[4]Average和Aggregate讲解
Count/Sum/Min/Max/Avg操作符
适用场景:
统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。
Count
说明:
返回集合中的元素个数,返回INT类型;不延迟。
生成SQL语句为:
SELECTCOUNT(*)FROM
1.简单形式:
得到数据库中客户的数量:
varq=db.Customers.Count();//总记录数
2.带条件形式:
得到数据库中未断货产品的数量:
varq=db.Products.Count(p=>!
p.Discontinued);
//条件放在括号中
LongCount
说明:
返回集合中的元素个数,返回LONG类型;不延迟。
对于元素个数较多的集合可视情况可以选用LongCount来统计元素个数,它返回long类型,比较精确。
生成SQL语句为:
SELECTCOUNT_BIG(*)FROM
varq=db.Customers.LongCount();
Sum
说明:
返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。
生成SQL语句为:
SELECTSUM(…)FROM
1.简单形式:
得到所有订单的总运费:
varq=db.Orders.Select(o=>o.Freight).Sum();
db.Order.select:
筛选
db.Order..where:
筛选
2.映射形式:
得到所有产品的订货总数:
varq=db.Products.Sum(p=>p.UnitsOnOrder);
Min
说明:
返回集合中元素的最小值;不延迟。
生成SQL语句为:
SELECTMIN(…)FROM
1.简单形式:
查找任意产品的最低单价:
varq=db.Products.Select(p=>p.UnitPrice).Min();
2.映射形式:
查找任意订单的最低运费:
varq=db.Orders.Min(o=>o.Freight);
条件直接放在括号后面
3.元素:
查找每个类别中单价最低的产品:
varcategories=
frompindb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINQtoSQL 语法 实例 大全
![提示](https://static.bdocx.com/images/bang_tan.gif)