zoukankan      html  css  js  c++  java
  • Linq 中 Any与All

    昨天突然看到之前写的一个积累文档,其中文档中有一个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      ENDAS [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      ENDAS [value]

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

  • 相关阅读:
    去除phpcms会员登录后头部登陆条的会员名称的括号
    图片左右间隔滚动Jquery特效
    JS判断字符串长度的5个方法
    HTML中&nbsp; &ensp; &emsp; &thinsp;等6种空白空格的区别
    Chrome firefox ie等浏览器空格&nbsp;宽度不一样怎么办
    jQuery延迟加载插件(Lazy Load)详解
    jquery复选框 选中事件 及其判断是否被选中
    手机网页Html代码实现(解决显示页面很小的问题)
    iOS下的按钮css去除原生样式
    用纯css改变下拉列表select框的默认样式(不兼容IE10以下)
  • 原文地址:https://www.cnblogs.com/AaronAndJoe/p/4642231.html
Copyright © 2011-2022 走看看