其实我也不知道是不是另类的,反正我找了好久园子里和其他资源。

无外乎两类

1,构造动态表达式的,这个真心繁琐,我是懒人,不想弄表达式。

2,拼SQL语句,直接执行,这个和ado.net就没有啥区别了。

我想继续用Linq,有不想用上面的两种方法,于是我测试了下面这种方法,结果完全符合预期,看看是怎么写的吧。

记录在这里,以备查阅

                var result = from s in ct.dbContext.LT_Surveyjoin r in ct.dbContext.LT_Inquiry on s.InquiryCode equals r.InquiryCodejoin ig in ct.dbContext.LM_InquiryGuide on r.GuideNo equals ig.GuideCode into tempfrom tt in temp.DefaultIfEmpty()where((!string.IsNullOrEmpty(notificationDateS) && r.NotificationDate.CompareTo(notificationDateS) >= 0) || string.IsNullOrEmpty(notificationDateS))&& ((!string.IsNullOrEmpty(notificationdateE) && r.NotificationDate.CompareTo(notificationdateE) <= 0) || string.IsNullOrEmpty(notificationdateE))&& (s.ForEarthwork == 0 || s.ForEarthwork == 1)select new{s.ForEarthwork,r.GuideNo,r.NoticeDate};

主要看where后面的两句,notificationDateS,和notificationDateE是一个开始日期和结束日期,在画面上是动态条件。可以不输入,或是输入其中一个,或是两个都输入。实现的要点就是这一句(!string.IsNullOrEmpty(notificationDateS) && r.NotificationDate.CompareTo(notificationDateS) >= 0) || string.IsNullOrEmpty(notificationDateS),我只能说linq很智能,他能推测出,如果notificationDateS为空,这一窜就是个恒等于真的表达式,linq会忽略掉这个条件。

看看画面不同的输入,生成的sql大家就知道了

notificationDateS:2014/03/03

notificationDateE:空白

SELECT [t0].[ForEarthwork], [t1].[GuideNo], [t1].[NoticeDate]
FROM [dbo].[LT_Survey] AS [t0]
INNER JOIN [dbo].[LT_Inquiry] AS [t1] ON [t0].[InquiryCode] = ([t1].[InquiryCode])
LEFT OUTER JOIN [dbo].[LM_InquiryGuide] AS [t2] ON [t1].[GuideNo] = [t2].[GuideCode]
WHERE ([t1].[NotificationDate] >= @p0) AND (([t0].[ForEarthwork] = @p1) OR ([t0].[ForEarthwork] = @p2))

notificationDateS:2014/03/03

notificationDateE:2014/03/13

SELECT [t0].[ForEarthwork], [t1].[GuideNo], [t1].[NoticeDate]
FROM [dbo].[LT_Survey] AS [t0]
INNER JOIN [dbo].[LT_Inquiry] AS [t1] ON [t0].[InquiryCode] = ([t1].[InquiryCode])
LEFT OUTER JOIN [dbo].[LM_InquiryGuide] AS [t2] ON [t1].[GuideNo] = [t2].[GuideCode]
WHERE ([t1].[NotificationDate] >= @p0) AND ([t1].[NotificationDate] <= @p1) AND (([t0].[ForEarthwork] = @p2) OR ([t0].[ForEarthwork] = @p3))

notificationDateS:空白

notificationDateE:空白

SELECT [t0].[ForEarthwork], [t1].[GuideNo], [t1].[NoticeDate]
FROM [dbo].[LT_Survey] AS [t0]
INNER JOIN [dbo].[LT_Inquiry] AS [t1] ON [t0].[InquiryCode] = ([t1].[InquiryCode])
LEFT OUTER JOIN [dbo].[LM_InquiryGuide] AS [t2] ON [t1].[GuideNo] = [t2].[GuideCode]
WHERE ([t0].[ForEarthwork] = @p0) OR ([t0].[ForEarthwork] = @p1)

完全符合我的要求哦,good!这种方法以前有人用过吗?不知道各位还有没有更好的动态sql方法哈,欢迎讨论哦。

转载于:https://www.cnblogs.com/xiashengwang/p/3586366.html

Linq to Sql 动态条件另类实现方法相关推荐

  1. QueryBuilder : 打造优雅的Linq To SQL动态查询

    首先我们来看看日常比较典型的一种查询Form 这个场景很简单:就是根据客户名.订单日期.负责人来作筛选条件,然后找出符合要求的订单. 在那遥远的时代,可能避免不了要写这样的简单接口: public i ...

  2. linq to sql 多条件组合查询

    linq to sql 我这里查询tbdesk表内的记录 DeskTypeID和Name是条件     private void bind()     {         using (cpDataC ...

  3. mysql 构造 linq语句_[转]查看LINQ生成SQL语句的几种方法

    记录LINQ生成的SQL语句是常用的调试方式,而且能根据需要来优化LINQ生成的SQL语句,更能了深入的了解LINQ. DataContext的Log属性来将LINQ to SQL生成的SQL语句格式 ...

  4. Linq to Sql : 动态构造Expression进行动态查询

    前一篇在介绍动态查询时,提到一个问题:如何根据用户的输入条件,动态构造这个过滤条件表达式呢? Expression<Func<ProductExt, bool>> predic ...

  5. linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)

    ,我们做了基于linq to sql 的多条件组合查询,但通过监视数据库发现,这样做的成本比较高,每次都要取出全部的数据到内存进行筛选.如何从真正意义上做到延迟加载,即一次只从数据库中取我们需要的用到 ...

  6. 转载:LINQ to SQL更新数据库操作

    翻译整理ScottGu的关于LINQ to SQL的Part 4: Updating our Database .该Post讲解了如何使用LINQ to SQL更新数据库,以及如何整合业务逻辑和自定义 ...

  7. ScottGu之博客翻译-LINQ to SQL第四部分,更新数据库 LINQ to SQL (Part 4 - Updating our Database)...

    原贴链接: http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.asp ...

  8. N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)

    在将实体对象(如 Customers 或 Orders)通过网络序列化到客户端时,这些实体会与其数据上下文分离.数据上下文不再跟踪这些实体的更改或它们与其他对象的关联.只要客户端只读取数据,这就不会成 ...

  9. 手把手教你用好LINQ to SQL(1)

    From: http://developer.51cto.com/art/200904/120915.htm 作者写下这篇文章的主要目的不是"一口吃成个胖子"让大家一次就学会LIN ...

最新文章

  1. 斯坦福团队开发智能盲杖,搭载激光雷达,可探测障碍规划路线,完全开源可在家DIY...
  2. 如何初始化类的static成员变量?
  3. 学习笔记84—[深度学习]神经网络反向传播(BackPropagation)
  4. maven overlay 扩展
  5. MapReduce+Docker:Archer简化Netflix媒体处理
  6. webbrowser 修改浏览器版本的方法
  7. 前端小白进阶笔记之多级菜单分享
  8. ERROR: Minions returned with non-zero exit code
  9. 以太网测试仪的RFC2544测试你了解吗?
  10. 怎么把win10右下角的隐藏图标调出来(把倒三角调出来)
  11. Python 获取LOL所有英雄的传说
  12. 考研数学一二三 2010-2019年每道题的难度系数
  13. 一加8T安装的EdXposed插件导致手机无限重启的解决办法
  14. 手机app显示服务器端异常502,修复 HTTP 502 和 HTTP 503 错误 - Azure App Service | Microsoft Docs...
  15. 【高德地图入门】--- 绘制面
  16. chrome总是提示\喔唷,崩溃啦\的解决办法
  17. 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)
  18. 手把手教你使用Typecho搭建自己的个人博客
  19. QLCDNumber制作的超简单计时器,按下空格键暂停。
  20. java详细安装教程一一java(jdk)安装

热门文章

  1. hough变换检测圆周_【视觉】视觉检测人应该了解的缺陷检测方法
  2. [软件推荐]使用OneNote来构建你自己的知识库(OFFICE2010)
  3. Apache Commons:Betwixt介绍
  4. “希希敬敬对”团队作业——敏捷冲刺5
  5. JPA实体关联关系,一对一以及转换器
  6. button按钮怎么实现超链接
  7. js 调用后台代码(比较实用,好记)
  8. [C程序设计语言]第一部分
  9. AndroidのActivity之退出返回栈(二)
  10. java getcurrentpid