LINQ基础——WHERE子句

LINQ基础——WHERE子句

一、简介

将一个布尔条件("谓词")应用于每个源元素(由范围变量引用),并返回满足指定条件的元素。
适用场景:实现过滤,查询等功能。
说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。
Where操作包括3种形式,分别为:简单形式、关系条件形式、First()形式。

二、案例

简单形式

使用where筛选在伦敦的客户:

var q =
    from c in db.Customers
    where c.City == "London"
    select c;

筛选2000年或之后雇用的雇员:

var q =
    from e in db.Employees
    where e.HireDate >= new DateTime(2000, 1, 1)
    select e;

关系条件形式

筛选库存量在订货点水平之下但未断货的产品:

var q =
    from p in db.Products
    where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
    select p;

筛选出UnitPrice 大于10 或已停产的产品:

var q =
    from p in db.Products
    where p.UnitPrice > 10m || p.Discontinued
    select p;

下面这个例子是调用两次where以筛选出UnitPrice大于10且已停产的产品:

var q =
    db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued);

First()形式

返回集合中的一个元素,其实质就是在SQL语句中加TOP (1)。

简单用法

选择表中的第一个发货方。

Shipper shipper = db.Shippers.First();

元素:

选择CustomerID 为“BONAP”的单个客户

Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");

条件:

选择运费大于 100.00 的订单:

Order ord = db.Orders.First(o => o.Freight > 100.00M);

WHERE的其他案例

将数组中小于5的偶数查询出来输出到控制台

//数据源
int[] arr = { 0, 3, 2, 1, 9, 6, 8, 7, 4, 5 };

//使用Where子句查询的查询语句
var query = from a in arr
            where a < 5 && a % 2 == 0
            select a;

//执行查询
foreach (var a in query)
{
    Console.WriteLine(a);
}

分析:

首先遍历数组中的每个元素,然后用where语句筛选出小于5,并且对2去模是0的数查询出来返回。
where子句不仅能使用表达式来进行筛选,还可以使用方法进行筛选。

public static bool IsEven(int a)
{
    return a % 2 == 0 ? true : false;
}
//数据源
int[] arr = { 0, 3, 2, 1, 9, 6, 8, 7, 4, 5 };

//where子句也可以接受一个方法
var query = from a in arr
            where IsEven(a)
            select a;

foreach (var a in query)
{
    Console.Write(a + ",");
}

这就是一个在where语句中使用方法进行筛选的例子,输出的结果和上例完全一样。

三、总结

使用where子句还要注意以下几点:
1.一个查询表达式可以包含多个where子句
2.where子句是一种筛选机制。除了不能是第一个或最后一个子句外,它几乎可以放在查询表达式中的任何位置。where子句可以出现在group子句的前面或后面,具体情况取决于是3.必须在对源元素进行分组之前还是分组之后来筛选源元素。
4.如果指定的谓词对于数据源中的元素无效,则会发生编译时错误。这是Linq提供的强类型检查的一个优点。
5.编译时,where关键字会被转换为对where标准查询运算符方法的调用。

posted @ 2021-06-01 13:37  码农阿亮  阅读(411)  评论(0编辑  收藏  举报