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      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的。

时间: 2024-11-05 23:21:11

Linq 中 Any与All的相关文章

LINQ中的一些查询语句格式

LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> LINQ 基本子句from查询子句——基础后面跟随着项目名称和数据源示例代码如下:var str = from lq in str select lq; 其中select语句指定了返回到集合变量中的元素是来自哪个数据源的 from查询子句——嵌套查询可以在from子句中嵌套另一个from子句即可,示例代码如下

Sliverlight linq中的数组筛选数据库中的数据

首先 什么是linq呢 ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. 它是.NET框架的扩展,它允许我们以数据库查询的方式查询数据集合. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据. 接下来讲讲我工作中用到的 linq中的数组筛选数据库中的数据 public List GetList1(string cardPhone,string

Linq中GroupBy方法的使用总结(转)

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

Linq 中按照多个值进行分组(GroupBy)

Linq 中按照多个值进行分组(GroupBy) .GroupBy(x => new { x.Age, x.Sex }) group emp by new { emp.Age, emp.Sex } into g // 实现多key分组的扩展函数版本 var sums = empList .GroupBy(x => new { x.Age, x.Sex }) .Select(group => new { Peo = group.Key, Count = group.Count() });

linq中AsEnumerable和AsQueryable的区别

本文导读:用Linq来操作集合的时候会用到AsQueryable()和AsEnumerable(),何时该用AsQueryable()和何时该用AsEnumerable(),或许存在些疑惑.AsQueryable是在数据库中查询再返回数据,AsEnumerable是从数据库读取全部数据再在程序中查询. 在使用LINQ 进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作.

Entity Framework 6 Recipes 2nd Edition(11-9)译 -&gt; 在LINQ中使用规范函数

11-9. 在LINQ中使用规范函数 问题 想在一个LINQ查询中使用规范函数 解决方案 假设我们已经有一个影片租赁(MovieRental )实体,它保存某个影片什么时候租出及还回来,以及滞纳金等,如Figure 11-9. 所示: Figure 11-9. The MovieRental entity that has the dates for a rental period along with any late fees 我们想取得所有租期超过10天的影片 如何创建和使用查询,如Lis

04 LINQ中的聚合函数(Aggregate function in LINQ)

试想一下,我们有一个List<int>数组,现在我们想对List中的所有值求和.在没学习LINQ之前我们会轻松的写出下面的代码: static void Main(string[] args) { List<int> array = new List<int>() { 1, 3, 3, 2, 7, 3, 2, 8, 5, 4, 6 }; int sum = 0; foreach (int item in array) { sum += item; } Console.W

LINQ中的陷阱--TakeWhile&amp;SkipWhile

在用TakeWhile,SkipWhile设置陷阱之前,我们先来看一看他们的兄弟Take和Skip: public static IEnumerable<T> Take<T>(IEnumerable<T> source, int count) public static IEnumerable<T> Skip<T>(IEnumerable<T> source, int count) 这两个操作符从字面上看就能理解其含义.Take将枚举

使用Linq中的Distinct方法对序列进行去重操作

使用Linq提供的扩展方法Distinct可以去除序列中的重复元素. 该方法具有以下两种重载形式: (1)public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source) (重载1) 通过使用默认的相等比较器对值进行比较并返回序列中的非重复元素. (2)publicstatic IQueryable<TSource> Distinct<TSour

Linq中使用存储过程作为结果集(转)

存储过程 在我们编写程序中,往往需要一些存储过程,在LINQ to  SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中,有名为Customers Count By Region的存储过程.该存储过程返回顾客所在"WA"区域的数量. ALTER PROCEDURE [dbo].[NonRowset] (@param1 NVARCHAR(15)) AS BEGIN SET NOCOUNT ON; D