Linq-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查找哪个客户包含OrderID10248的订单。

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/dotnetlina/archive/2011/08/11/2134469.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值