`
chungle
  • 浏览: 59984 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LINQ to SQL语句(7)之Exists/In/Any/All/Contains

阅读更多

Exists/In/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查找其所在城市为西雅图、伦敦、巴黎或温哥华的客户。

 

分享到:
评论

相关推荐

    LINQ_to_SQL语法及实例大全

    7. LINQ to SQL语句之Exists/In/Any/All/Contains:这些操作符用于判断数据集中是否存在特定元素或满足特定条件的数据项。例如,Contains用于判断集合中是否包含某个元素,Any用于判断集合中是否有任何元素满足条件...

    linq to sql中文教程

    **Exists/In/Any/All/Contains** 这些操作符用于检查集合中是否存在特定元素或满足特定条件的元素。 ```csharp bool anyItem = (from item in db.Items where item.Price > 100 select item).Any(); ``` #####...

    linq体验,linq基础学习

    "LINQ体验(7)——LINQ to SQL语句之Group By、Having和Exists、In、Any、All、Contains.docx"深入讲解了更复杂的查询操作,如分组(Group By)、基于分组条件的过滤(Having)、存在性检查(Exists)、成员关系测试...

    LINQ_TO_SQL 文档

    通过一系列文章,作者详细介绍了如何使用LINQ to SQL进行基础和高级查询操作,包括Where、Select、Distinct、Count、Sum、Min、Max、Avg、Join、Order By、Group By、Having、Exists、In、Any、All、Contains、Union...

    Linq_to_SQL

    7. Exists/In/Any/All/Contains操作符 这些操作符用于执行逻辑检查或判断操作,例如判断数据集是否包含某个元素(Any、Contains)、是否所有元素满足条件(All)等。 8. Concat/Union/Intersect/Except操作 这些...

    Linq体验系列文章打包

    6. **组操作**:`Group By`、`Having`、`Exists`、`In`、`Any`、`All`和`Contains`这些关键字都是用于对数据进行分组、过滤和统计的,它们在数据处理中扮演着重要角色。 7. **动态查询**:`动态查询`可能介绍了如何...

    LINQ_TO_SQL语法与实例大全

    **LINQ_TO_SQL**是一种用于Microsoft .NET Framework的技术,它允许开发人员使用面向对象的方式来进行数据库的操作,而无需编写复杂的SQL语句。LINQ_TO_SQL提供了一种简洁的方法来执行常见的数据操作,如查询、插入...

    LINQtoSQL语法及实例大全

    ### LINQtoSQL语句(7)之Exists/In/Any/All/Contains 用于执行更复杂的逻辑判断。 - **Any**:检查是否至少有一个元素满足条件。如`bool anyProductOver100 = db.Products.Any(p => p.Price > 100);` - **All**:...

    C Sharp LinQ

    #### 二、LINQ to SQL语句详解 ##### 1. Where操作 - **简单形式**:`var result = from p in db.Products where p.UnitPrice > 5 select p;` - 这里`db.Products`是一个包含所有产品的集合,`p.UnitPrice > 5`是...

Global site tag (gtag.js) - Google Analytics