linq 入门 查询基础
通过上一篇想必大家已经知道了如何创建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没也多久,纯粹是以学习笔记的形式整理记录的,如果有不正确的地方请指正,谢谢。
从别后, 忆相逢, 几会魂梦与汝同。
分类:
Linq
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端