昨天突然看到之前写的一个积累文档,其中文档中有一个Linq Any和All的注意事项:

注意Any 和 All

var list = new List<int>();

var aa = list.All(n => n > 1);

var bb = list.Any(n => n > 1);

// aa: true       bb: false

其中List是一个元素个数为0的整型List。
可能大多数人跟我一样,第一次见到都会认为aa为false。
然后这个是我在程序中写Linq的时候,造成了很大困惑,明明条件是正确的(当时一直认为aa为false),却结果不对。 
最后一句一句,一个条件一个条件的拆分了执行,才找到这个原因。
看看他生成的SQL,我们就知道原因了

All:      IQueryable<Test>.All(t=>t.OpenId=="")

 1 -- Region Parameters
 2 DECLARE @p0 NVarChar(1000) = ''
 3 -- EndRegion
 4 SELECT 
 5     (CASE 
 6         WHEN NOT (EXISTS(
 7             SELECT NULL AS [EMPTY]
 8             FROM [Test] AS [t1]
 9             WHERE (
10                 (CASE 
11                     WHEN [t1].[OpenId] = @p0 THEN 1
12                     ELSE 0
13                  END)) = 0
14             )) THEN 1
15         WHEN NOT NOT (EXISTS(
16             SELECT NULL AS [EMPTY]
17             FROM [Test] AS [t1]
18             WHERE (
19                 (CASE 
20                     WHEN [t1].[OpenId] = @p0 THEN 1
21                     ELSE 0
22                  END)) = 0
23             )) THEN 0
24         ELSE NULL
25      END) AS [value]

可以看得出来, All 是用的 Not (Exists) , 当Query为空的时候,Exists是为false的,而前面一个Not (false),当然也成为了True;

Any:          IQueryable<Test>.Any(t=>t.OpenId=="")

1 -- Region Parameters

 2 DECLARE @p0 NVarChar(1000) = ''
 3 -- EndRegion
 4 SELECT 
 5     (CASE 
 6         WHEN EXISTS(
 7             SELECT NULL AS [EMPTY]
 8             FROM [Test] AS [t0]
 9             WHERE [t0].[OpenId] = @p0
10             ) THEN 1
11         ELSE 0
12      END) AS [value]

可以看出   Any生成的是Exists。  当Query为空的时候,Exists是为false的。

转载于:https://www.cnblogs.com/AaronAndJoe/p/4642231.html

Linq 中 Any与All相关推荐

  1. 用日志记录LINQ中的所有增删改的SQL语句的方法

    我们知道LINQ中的增删改都要调用SubmitChanges方法,我们记录所有SQL的方式就是重写(override)DataContext中的SubmitChanges方法,为了避免每次修改dbml ...

  2. Linq中的Where与SkipWhile

    本文将介绍Linq中的Where与SkipWhile的用法,有时我们容易混淆它们.下面来看一个简单的UnitTest: [TestMethod] public void TestSkipWhileAn ...

  3. LINQ中ForEach方法的使用

    标签: linq 2016-06-25 12:47 409人阅读 评论(0) 收藏 举报分类: LINQ(5) 我の原创(113) 版权声明:本文为博主原创文章,未经博主允许不得转载.LINQ中For ...

  4. Linq中的group by多表多字段,Sum求和

    Linq中的group by多表多字段,Sum求和 //Line to Sql 写法var data = (from a in Itemsgroup a by new { a.GroupId, a.I ...

  5. C#8.0: 在 LINQ 中支持异步的 IAsyncEnumerableT接口

    C# 8.0中,提供了一种新的IAsyncEnumerable<T>接口,在对集合进行迭代时,支持异步操作.比如在读取文本中的多行字符串时,如果读取每行字符串的时候使用同步方法,那么会导致 ...

  6. Linq中string转int的方法

    Linq中string转int的方法 在做批量删除时,需把一串id值所对应的数据删除,调试出现问题: Linq语句中如果使用ToString()进行类型转换,编译时不会报错,但执行时会出现如下错误: ...

  7. 转载Linq中GroupBy方法的使用总结

    Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等. Linq中的Groupby方法也有这种功能.具体实现看代码: 假设有如下的一个数据集: public class St ...

  8. linq中let关键字学习

    linq中let关键字就是对子查询的一个别名,let子句用于在查询中添加一个新的局部变量,使其在后面的查询中可见. linq中let关键字实例 1.传统下的子查询与LET关键字的区别 C# 代码    ...

  9. linq中给字段添加别名

    linq 是我们在查询中经常回用到的一种形式,比如我们创建一个类,然后List<添加> 并绑定到表格中public class Modeltest{string id;public str ...

  10. LINQ中的Lambda表达式

    Lambda Expressions in LINQ 在第12章,我提到可以用lambda表达式定义内联的委托定义.在如下表达式中: customer => customer.FirstName ...

最新文章

  1. 我的android studio开发环境搭建历程(一部辛酸史)
  2. 您可能不知道的ASP.Net小技巧
  3. 不使用GACUtil.exe,如何部署和卸载程序集到GAC中
  4. 单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...
  5. Python入门教学之(转义字符与原字符)
  6. ARM Cortex-M0(1)---浅谈ARM Cortex-M0
  7. SAP License:SAP货币转换
  8. Atlas系列一:Atlas功能特点FAQ
  9. 微型计算机原理及应用论文,微机原理及应用结业论文
  10. 常用分析模型---RFM客户价值模型
  11. AutoCAD中禁用shift+鼠标中键组合作为动态观察的功能
  12. 软件测试 技术类面试题问题集锦
  13. Canvas绘制六边形网格
  14. CentOS 7 升级Python2.7到Pyton3.6
  15. uc7.5java下载,uc浏览器7.5版手机下载-uc浏览器7.5官方版v7.5 安卓版 - 极光下载站...
  16. 记录关于富文本编辑器出现的不能插入图片问题
  17. 教室计算机英语怎么读,教室英文怎么读?
  18. 安卓设备脱离pc自动化测试,Termux模拟器下python+uiautomator2的环境设置。本人亲测,踩坑总结。
  19. IDEA 206个快捷键 动图演示,键盘侠标配
  20. C#利用DirectX显示.x三维动画

热门文章

  1. 操作系统锁的实现方法有哪几种_「从入门到放弃-Java」并发编程-锁-synchronized...
  2. lepus监控oracle数据库_lepus天兔数据库监控系统搭建记录
  3. vbs打开软件光标停在第一个输入框_三维设计软件,3DMAX最全快捷键大全,赶快收藏哦...
  4. 入门 | 初学者必读:解读14个深度学习关键词
  5. [C语言]为什么要有include?——从Hello World说起
  6. Python 命令汇总
  7. Tensorflow官方文档---起步 MNIST示例
  8. selenium python 入门-元素定位
  9. Primer c++ 第5版pdf
  10. rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计