linq之Any、All、Contains方法

一、Any
用于判断集合中是否有元素满足某一条件;不延迟。(若条件为空,则集合只要不为空就返回True,否则为False)。
有2种形式,分别为简单形式和带条件形式。

1.简单形式:
如:
仅返回没有订单的客户:
var q =from c in db.Customers where !c.Orders.Any() select c;

生成SQL语句为:
SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],[t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],[t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]FROM [dbo].[Customers] AS [t0]WHERE NOT (EXISTS(SELECT NULL AS [EMPTY] FROM [dbo].[Orders] AS [t1] WHERE [t1].[CustomerID] = [t0].[CustomerID]))

2.带条件形式:
如:
仅返回至少有一种产品断货的类别:
var q =from c in db.Categories where c.Products.Any(p => p.Discontinued) select c;

生成SQL语句为:
SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description],[t0].[Picture] FROM [dbo].[Categories] AS [t0]WHERE EXISTS(SELECT NULL AS [EMPTY] FROM [dbo].[Products] AS [t1] WHERE ([t1].[Discontinued] = 1) AND ([t1].[CategoryID] = [t0].[CategoryID]))


二、All
用于判断集合中所有元素是否都满足某一条件;不延迟
1.带条件形式
如:
var q =from c in db.Customers where c.Orders.All(o => o.ShipCity == c.City) select c;
这个例子返回所有订单都运往其所在城市的客户或未下订单的客户。

三、Contains
用于判断集合中是否包含有某一元素;不延迟。它是对两个序列进行连接操作的。
如:
string[] customerID_Set =new string[] { "AROUT", "BOLID", "FISSA" };
var q =(from o in db.Orders where customerID_Set.Contains(o.CustomerID) select o).ToList();

查找"AROUT", "BOLID" 和 "FISSA" 这三个客户的订单。先定义了一个数组,在LINQ to SQL中使用Contains,数组中包含了所有的CustomerID,即返回结果中,所有的CustomerID都在这个集合内。也就是in。 你也可以把数组的定义放在LINQ to SQL语句里。比如:
var q = (from o in db.Orders  where (new string[] { "AROUT", "BOLID", "FISSA" }).Contains(o.CustomerID) select o).ToList();

Not Contains则取反:
var q = (from o in db.Orders  where !(new string[] { "AROUT", "BOLID", "FISSA" }).Contains(o.CustomerID) select o).ToList();

1.包含一个对象:
var order = (from o in db.Orders where o.OrderID == 10248 select o).First();
var q = db.Customers.Where(p => p.Orders.Contains(order)).ToList();
foreach (var cust in q){
    foreach (var ord in cust.Orders){
            //do something    }
}
这个例子使用Contain查找哪个客户包含OrderID为10248的订单。

2.包含多个值:
string[] cities = new string[] { "Seattle", "London", "Vancouver", "Paris" };
var q = db.Customers.Where(p=>cities.Contains(p.City)).ToList();
这个例子使用Contains查找其所在城市为西雅图、伦敦、巴黎或温哥华的客户。

内容来源:https://www.cnblogs.com/abllyboy/archive/2010/11/02/1867403.html

posted @   skybirdzw  阅读(1068)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示