首页 > 其他分享 >九、LINQ基础——WHERE子句

九、LINQ基础——WHERE子句

时间:2023-10-24 13:04:47浏览次数:30  
标签:WHERE db LINQ 查询 子句 var 筛选 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标准查询运算符方法的调用。


技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!

开源库地址,欢迎点亮:

GitHub: https://github.com/ITMingliang

Gitee:  https://gitee.com/mingliang_it

GitLab:  https://gitlab.com/ITMingliang

建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群

九、LINQ基础——WHERE子句_查询表达式


标签:WHERE,db,LINQ,查询,子句,var,筛选,where
From: https://blog.51cto.com/u_16244728/8002388

相关文章

  • 七、LINQ基础—Except子句
    一、简介Except返回差集,差集是指位于一个集合但不位于另一个集合的元素。Except是把第一个集合里面的数据去掉在第二个集合里面出现过的数据。二、案例案例一:varq=(fromcindb.Customersselectc.Name).Except(fromeindb.Employees......
  • mysqldump之where用法
    文档课题:mysqldump之where用法.数据库:MySQL5.7.21应用场景:实际生产中,需要运用mysqldump导出指定条件的数据,并且以insert语句的形式呈现,如下为相关测试.1、数据库信息mysql>select*fromstaffs;+----+------+-----+---------+---------------------+|id|name|age|p......
  • 求平均工资大于2500的部门平均工资是 having 新面孔比where强大的地方就在于它可以跟
       ---------------------------- ......
  • 【SQL】where查询条件中的1=1 及<>的含义
    1=1 表示永远为真,不起约束作用查询所有,不会报错SELECTt.*,t.rowidFROMtable_nametWHERE1=1;Tips:查询table_name表中的所有数据 1<>1代表false, 返回空结果集SELECTt.*,t.rowidFROMtable_nametWHERE1<>1; Tips:table_name表中有无数据,均......
  • gorm 使用where in 条件查询时,使用uint8[] 类型报错的解决方案
    出现问题:在开发过程中,遇到这样一个问题,GORMModel如下:typeTeststruct{ ... cloumnTypeuint8`gorm:"notnull;default:0"`...}其中有一个类型字段,数据范围是1-10所以使用uint8字段来存储,在查询某些类型的数据时,使用了下面的查询语句varlist[]model.......
  • 一、LINQ简介
    一、什么是LINQ长期以来,开发社区形成以下的格局:1、面向对象与数据访问两个领域长期分裂,各自为政。2、编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如:C#中字符串用string数据类型表示。SQL中字符串用NVarchar/Varchar/Char数据类型表示。3、SQL编码体验落......
  • EF使用linq和lamda实现sql查询的内连接(inner join)和左连接(left join)
    背景介绍:1.OperateLogInfo:日志表2.SystemUserInfo:用户表需求:查询日志表,要根据日志表的创建人id查询出创建人姓名(日志表连接用户表)publicstaticstringTest(){stringresult=null;varsqlLogs=newList<string>();......
  • Linq取单一元素
    LINQ通常查询到的结果是IEnumerable<T>集合类型,想要从中取出单一的元素,能使用Single、First、Last、ElementAt等方法,以及它们带有OrDefault的形式。Single返回序列中的惟一元素,First、Last返回第一個、最後一個元素。对比:方法序列为null序列不包含任何元素序列只包含一个......
  • 【C#】【System.Linq】一些便捷的数据处理方法(Range、Select)
    因为用习惯了Python中一些便捷的方法,随即查询C#中有没有类似的。 一、Range()方法在Python中,range(Start,End,Step)可以直接生成一个可迭代对象,便用于需要循环多次处理某些代码块:(注:Range方法中的End是开区间,range(1,10)实际的取值是(1~9))1foriteminrange(1,10):2print(ite......
  • 【算法】国庆加班,火锅与Linq.AddRange的奇妙螺旋
    在国庆假期的一个傍晚,小悦正在家中享受火锅美食。她嘴里咀嚼着鲜嫩的牛肉,脸上洋溢着满足的微笑。突然,手机铃声响起,打破了这温馨的氛围。她拿起手机一看,是公司打来的电话。“小悦,有个紧急的项目需要处理,你能来公司加一下班吗?”电话那头传来领导焦急的声音。小悦顿时嘟起嘴,不太情......