通过上一篇想必大家已经知道了如何创建linq to sql 模型,并对linq有了一个简单的了解。我们这篇主要来说一下linq操作数据库的一些基本操作,列出了sql语句和linq两种格式,方便大家参考。首先我们需要实例化我们刚才创建的对象模型,代码如下:
string strSql = "server=.;database=OnlineTraining;uid=sa; pwd=123456"; MyEntities.DataClasses1DataContext myLinq = new MyEntities.DataClasses1DataContext(strSql);
<1>基本查询 :
sql: select * from student linq: var query=from stu in myLinq.student select stu
var query= from stu in myLinq.student select new { 编号=stu.Id, 姓名=stu.UserName …… }
如果你只想取要查询的表中的某几个字段而不是全部则:
var query=stu in myLinq.student select new {stu.Id,stu.Name}
<2>条件查询 :
sql: select * from student where Id='1' and UserName='张三' linq: var query= from stu in myLinq.student where stu.Id='1'&& stu.UserName='张三'
select stu
按照条件查询基本和sql语句的写法是一样的,唯一的区别就是在sql中表示并列用and 而linq中用&&(表示并列,这个符号相信大家都不陌生。同样,linq中用||表示或,sql中用or
<3>排序
sql: select * from student order by Id desc linq: var query= from stu in myLinq.student orderby stu.Id descending select stu
<4> 分页 返回数据
var query= from stu in myLinq.student.skip(pageIndex*pageSize).take(pageSize);
<5>多表联合自连接
select uid指定取到数据的范围,比如要区没张表中的某些字段可用 select new {uid.***,pay.***}
sql: select * from Candidates_are c ,PayOrder p where c.UserID=p.UserID and p.IsPay=1 and c.Id_no='idCardNumber' linq: var query = from uid in c.Candidates_are from pay in c.PayOrder where uid.UserID == pay.UserID && pay.IsPay == true && uid.Id_no == idCardNumber select uid;
<6>join on 单条件
sql: select * from Candidates_are c join PayOrder p on c.UserID=p.UserID and p.IsPay=1 and c.Id_no='idCardNumber ' linq: var query = from user in c.Candidates_are on user.UserID equals pay.UserID where user.Id_no equal sidCardNumber select user;
<7>join on 多条件 如下:
var Query = from stu in stuList join stuCour in c.StudentCourseware on new { p1 = stu.IdentityCardNumber, p2 = year } equals new { p1 = stuCour.IdentityCardNumber, p2 = stuCour.Year } select new { stu.IdentityCardNumber, stu.TrueName, stu.Phone, stu.WorkUnit, stu.UnitNatureCode, stuCour.TrainingId, stuCour.Year };
这里简要说明一下博主在实际开发中遇到的一些问题,在多张表的联合查询中linq和直接执行sql语句相比效率较低,join on 联合查询比多个from的自连接查询方式要快,不知道是什么原因。在上面的所有例子中
变量query只是指定了linq查询,该查询并不是通过赋值语句执行的。只有使用forech循环访问查询时或ToList()的时候查询才会执行。在构建查询语句的时候应对尽可能的减少使用ToList()操作,大量的ToList()操作会严重影响性能。
好了这一节就这么多了,由于博主也是学习linq没也多久,纯粹是以学习笔记的形式整理记录的,如果有不正确的地方请指正,谢谢。