Linq中where查询
Linq的Where操作包括3种形式:简单形式、关系条件形式、First()形式。
1.简单形式:
例:使用where查询在北京的客户
var q = from c in db.Customers where
c.City == "beijing" select c;
再如:筛选1994 年或之后雇用的雇员:
var q = from e in db.Employees where
e.HireDate >= new DateTime(1994, 1, 1) select e;
2.关系条件形式:
筛选库存量在订货点水平之下但未断货的产品:
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);
3.First()形式:
返回集合中的一个元素,其实质就是在SQL语句中加TOP (1)。
简单用法:选择表中的第一个发货方。
Shipper shipper = db.Shippers.First();
元素:选择CustomerID 为“BONAP”的单个客户
Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");
条件:选择运费大于 10.00 的订单:
Order ord = db.Orders.First(o => o.Freight > 10.00M);
此外还有FirstOrDefault;Last、LastOrDefault 等方法
Single、SingleOrDefault;Last、LastOrDefault等方法的说明
这里以First、FirstOrDefault进行说明,其他类似。
1、First:取序列中满足条件的第一个元素,如果没有元素满足条件,则抛出异常
2、FirstOrDefault:取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)
Single,返回序列中的唯一一条记录,如果没有或返回多条,则引发异常。
SingleOrDefault,返回序列中的唯一一条记录,如果序列中不包含任何记录,则返回默认值,如果返回多条,则引发异常。
注:以上默认值为NULL。
First、FirstOrDefault的区别在于:当没有元素满足条件时,一个抛出异常,一个返回默认值。
因此,在使用时,一定要注意这个区别:
1、当确信序列中一定有满足条件的元素时,使用First方法,取到元素后,无需判断是否为null
2、当序列中可能找不到满足条件的元素时,使用FirstOrDefault方法,然后,一定要对返回值是否为null,进行不同的处理
在使用Max或Min方法时,必须要保证 调用方必须至少存在一个元素,若没有元素,则会抛出异常
如(假设ints的类型为IEnumerable:
int max = ints.Max(); //当ints的个数为0时,则抛出异常
为避免这个问题,一般情况下,可以如下编写:
int max = 0; //先设置一个默认值,即如果没有元素时,应该取的值
if (ints.Any())
{
max = ints.Max();
}
还有一种方式是使用DefaultIfEmpty方法:
ints.DefaultIfEmpty().Max(); //DefaultIfEmpty方法,会在ints元素个数为0时,返回一个存在唯一一个默认值元素的IEnumerable,这样调用Max时,就不会抛异常了
ints.DefaultIfEmpty(10).Max(); //也可以指定一个默认值,即当ints元素个数为0时,返回一个存在唯一一个元素的IEnumerable,而这唯一一个元素,就是你指定的值
Linq中where查询的更多相关文章
- C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法
连载目录 [已更新最新开发文章,点击查看详细] 介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的.但是在编译代码时,查询语法必须转换为针对 .NET ...
- 让LINQ中的查询语法使用自定义的查询方法
使用LINQ时有两种查询语法:查询语法和方法语法 查询语法:一种类似 SQL 语法的查询方式 方法语法:通过扩展方法和Lambda表达式来创建查询 例如: List<, , , }; //查询语 ...
- Linq中延迟查询和立即查询
//立即查询 public static void NowExecute() { var results = new int[]{5,4,3,2,1,6,7,8,9,0 }; int i = 0; v ...
- linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定
LINQ分组取出第一条数据 Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: I ...
- Linq中Select查询参数提取公共方法
class Program { static void Main(string[] args) { var listTest1 = new List<Test1> { "}, & ...
- LINQ to Entities 中的查询
MSDN地址:https://msdn.microsoft.com/zh-cn/library/bb399367%28v=vs.100%29.aspx .NET Framework 4 查询是一种从数 ...
- Linq中demo,用力看看吧
本文导读:LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能.Linq中where查询与SQL命令中的Where作用相似,都是起到范围限定 ...
- LINQ中的一些查询语句格式
LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...
- 转linq中的Single()、First()、Take(1) LINQ 标准的查询操作符 排序 orderby、thenby、Take
Single():操作一个集合,同时强要求只有一个对象匹配,并返回这一个. First():操作一个集合,可以有多个对象匹配,但是只返回第一个. Take(1):操作一个集合,可以有对个对象匹配,单只 ...
随机推荐
- 洛谷 P4147 玉蟾宫 (最大子矩形问题)
这道题用到了悬线法,非常牛逼,可以看这个论文. https://blog.csdn.net/twtsa/article/details/8120269 #include<cstdio> # ...
- HDU--4891--The Great Pan--暴力搜索
The Great Pan Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- windows环境利用apache 配置虚拟主机
windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...
- BZOJ 1088 水模拟
BZOJ水一道~ 枚举前两个位置是否放雷,模拟向下推.能够则ans++ #include "stdio.h" #include "string.h" int a ...
- 【剑指Offer面试题】 九度OJ1371:最小的K个数
题目链接地址: http://ac.jobdu.com/problem.php?pid=1371 题目1371:最小的K个数 时间限制:1 秒内存限制:32 兆特殊判题:否提交:5938解决:1265 ...
- SSL 延迟与 Http、Https
SSL延迟有多大? 1. 基本概念 ssl 协议由网景公司(Netscape)设计,由此网络链接从 http 逐步走向更为安全的 https 加密链接模式. HTTPs 链接和 HTTP 链接都建立在 ...
- 将ubuntu安装在用剩下的硬盘改装成的移动硬盘时遇到的问题及解决办法
安装时分完盘后提示:“分配到/的分区开始于3584字节,使用磁盘的最小对齐,这可能造成非常差的性能..." 解决办法: 回到windows使用分区助手等工具先分好盘而不是在安装时分盘(这样分 ...
- SVN冲突的解决过程
此文教程只是个人记录使用,不建议当教程!(估计新手也看得懵) 改完之后Ctrl+s保存就好.
- VS2013+PTVS,python编码问题
1.调试,input('中文'),乱码2.调试,print('中文'),正常3.不调试,input('中文'),正常4.不调试,print('中文'),正常 页面编码方式已经加了"# -- ...
- 使用python抓取App数据
App接口爬取数据过程使用抓包工具手机使用代理,app所有请求通过抓包工具获得接口,分析接口反编译apk获取key突破反爬限制需要的工具:夜神模拟器FiddlerPycharm实现过程首先下载夜神模拟 ...