常用的LINQ to SQL 用法

一、Where操作

  适用场景:实现过滤,查询等功能。

  说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。

  Where操作包括3种形式,分别为简单形式、关系条件形式、First()形式。下面分别用实例举例下:

 

1.简单形式:

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

var q =

  from c in db.Customers

  where c.City == "London"

  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);

 

二、Select/Distinct

 

说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来;延迟。

 

Select/Distinct操作包括9种形式,分别为简单用 法、匿名类型形式、条件形式、指定类型形式、筛选形式、整形类型形式、嵌套类型形式、本地方法调用形式、Distinct形式。

 

1.简单用法:

 

这个示例返回仅含客户联系人姓名的序列。

 

var q =

 

  from c in db.Customers

 

  select c.ContactName;

 

注意:这个语句只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的时候,它才会执行这个语句,这就是延迟加载(deferred loading)。如果,在声明的时候就返回的结果集是对象的集合。你可以使用ToList() 或ToArray()方法把查询结果先进行保存,然后再对这个集合进行查询。当然延迟加载(deferred loading)可以像拼接SQL语句那样拼接查询语法,再执行它。

 

2.匿名类型形式:

 

说明:匿名类型是C#3.0中新特性。其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。匿名类型还依赖于另外一个特性:支持根据property来创建对象。比如,var d = new { Name = "s" };编译器自动产生一个有property叫做Name的匿名类,然后按这 个类型分配内存,并初始化对象。但是var d = new {"s"};是编译不 通过的。因为,编译器不知道匿名类中的property的名字。例如stringc = "d";var d = new { c}; 则是可以通过编译的。编译器会创建一个叫 做匿名类带有叫c的property。

 

 

 

例如下例:new {c,ContactName,c.Phone};ContactName和Phone都是在映射文件中定义与表中字 段相对应的property。编译器读取数据并创建对象时,会创建一个匿名类,这个 类有两个属性,为ContactName和Phone,然后根据数据初始化对象。另外编译器 还可以重命名property的名字。

 

 

 

var q =

 

  from c in db.Customers

 

  select new {c.ContactName, c.Phone};

 

 

 

上面语句描述:使用 SELECT 和匿名类型返回仅含客户联系人姓名和电话号码的序列

 

 

 

var q =

 

  from e in db.Employees

 

  select new

 

  {

 

    Name = e.FirstName + " " + e.LastName,

 

    Phone = e.HomePhone

 

  };

 

 

 

上面语句描述:使用SELECT和匿名类型返回仅含雇员姓名和电话号码的序列,并将 FirstName和LastName字段合并为一个字段“Name”,此外在所得的序列中将HomePhone字段重命名为Phone。

 

 

 

var q =

 

  from p in db.Products

 

  select new

 

  {

 

     p.ProductID,

 

    HalfPrice = p.UnitPrice / 2

 

  };

 

 

 

上面语句描述:使用SELECT和匿名类型返回所有产品的ID以及 HalfPrice(设置为产品单价除以2所得的值)的序列。

 

 

 

3.条件形式:

 

 

 

说明:生成SQL语句为:case when condition then else。

 

 

 

var q =

 

  from p in db.Products

 

  select new

 

  {

 

    p.ProductName,

 

    Availability =

 

     p.UnitsInStock - p.UnitsOnOrder < 0 ?

 

    "Out Of Stock" : "In Stock"

 

  };

 

 

 

上面语句描述:使用SELECT和条件语句返回产品名称和产品供货状态的序列。

 

 

 

4.指定类型形式:

 

 

 

说明:该形式返回你自定义类型的对象集。

 

 

 

var q =

 

  from e in db.Employees

 

  select new Name

 

   {

 

    FirstName = e.FirstName,

 

    LastName = e.LastName

 

  };

 

 

 

上面语句描述:使用SELECT和已知类型返回雇员姓名的序列。

 

 

 

5.筛选形式:

 

 

 

说明:结合where使用,起到过滤作用。

 

 

 

var q =

 

  from c in db.Customers

 

   where c.City == "London"

 

  select c.ContactName;

 

 

 

上面语句描述:使用SELECT和WHERE返回仅含伦敦客户联系人姓名的序列。

 

 

 

6.shaped形式(整形类型):

 

 

 

说明:其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象。

 

 

 

var q =

 

  from c in db.Customers

 

  select new {

 

    c.CustomerID,

 

    CompanyInfo = new {c.CompanyName, c.City, c.Country},

 

    ContactInfo = new {c.ContactName, c.ContactTitle}

 

  };

 

 

 

语句描述:使用 SELECT 和匿名类型返回有关客户的数据的整形子集。查询顾客的ID和公司信息(公司名称,城市,国家)以及联系信息(联系人和职位)。

 

 

 

7.嵌套类型形式:

 

 

 

说明:返回的对象集中的每个对象DiscountedProducts属性中,又包含一个集合。也就是每个对象也是一个集合类。

 

 

 

var q =

 

  from o in db.Orders

 

  select new {

 

     o.OrderID,

 

    DiscountedProducts =

 

      from od in o.OrderDetails

 

      where od.Discount > 0.0

 

      select od,

 

    FreeShippingDiscount = o.Freight

 

  };

 

 

 

语句描述:使用嵌套查询返回所有订单及其OrderID 的序列、打折订单中项目的子序列以及免送货所省下的金额。

 

 

 

8.本地方法调用形式(LocalMethodCall):

 

 

 

这个例子在查询中调用本地方法 PhoneNumberConverter将电话号码转换为国际格式。

 

 

 

var q = from c in db.Customers

 

     where c.Country == "UK" || c.Country == "USA"

 

     select new

 

     {

 

       c.CustomerID,

 

       c.CompanyName,

 

       Phone = c.Phone,

 

       InternationalPhone =

 

       PhoneNumberConverter(c.Country, c.Phone)

 

     };

 

 

 

PhoneNumberConverter方法如下:

 

 

 

public string PhoneNumberConverter(stringCountry, string Phone)

 

{

 

  Phone = Phone.Replace(" ", "").Replace(")", ")-");

 

  switch (Country)

 

   {

 

    case "USA":

 

      return "1- " + Phone;

 

    case "UK":

 

       return "44-" + Phone;

 

    default:

 

      return Phone;

 

  }

 

}

 

 

 

下面也是使用了这个方法将电话号码转换为国际格式并创建XDocument

 

 

 

XDocument doc = new XDocument(

 

  new XElement("Customers", from c in db.Customers

 

       where c.Country == "UK" || c.Country == "USA"

 

       select (new XElement ("Customer",

 

           new XAttribute ("CustomerID", c.CustomerID),

 

           new XAttribute("CompanyName", c.CompanyName),

 

           new XAttribute("InterationalPhone",

 

            PhoneNumberConverter(c.Country, c.Phone))

 

           ))));

 

9.Distinct形式:

 

 

 

说明:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers]

 

 

 

var q = (

 

  from c in db.Customers

 

  select c.City )

 

  .Distinct();

 

 

 

语句描述:查询顾客覆盖的国家。

 

转载于:https://www.cnblogs.com/czqbk/p/4997754.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Python写一个将Python2代码转换成Python3代码的批处理工具

之前写过一篇如何在windows操作系统上给.py文件添加一个快速处理的右键功能的文章&#xff1a;《一键将Python2代码自动转化为Python3》&#xff0c;作用就是为了将Python2的文件升级转换成Python3的文件。之后&#xff0c;有朋友问&#xff0c;如果有很多文件需要转换&#xf…

WP 手机Lumia 820 锁屏密码的POJI研究

Windows Phone lumia 手机锁屏密码的POJI研究大家好今天给大家分享一个最新研究案例&#xff0c;近日笔者Nokia Lumia 820&#xff0c;由于客户密码失误太多&#xff0c;导致锁屏23000余分钟&#xff0c;&#xff0c;请看&#xff1a;型号Nokia Lumia820条件&#xff1a;Lumia8…

ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)

文章目录1. 专栏简介2. 专栏地址3. 专栏目录1. 专栏简介 本教程《ArcGIS从入门到精通系列实验教程》内容包括&#xff1a;ArcGIS平台简介、ArcGIS应用基础、空间数据的采集与组织、空间数据的转换与处理、空间数据的可视化表达、GIS空间分析导论、矢量数据的空间分析、栅格数据…

【iVX 初级工程师培训教程 10篇文拿证】09 聊天室制作

目录 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照 【iV…

为什么Dapr是比SpringCloud和Istio更优雅的微服务框架?

作者&#xff1a;徐磊文章首发地址&#xff1a;https://smartide.cn/zh/blog/2022-0601-dapr/Dapr 是微软主导的云原生开源项目&#xff0c;2019年10月首次发布&#xff0c;到正式发布 V1.0 版本的不到一年的时间内&#xff0c;github star 数达到了 1.2万&#xff08;现在已经…

Android之模拟网络请求返回http 502、400、401、402错误码

1 问题 app 网络框架协程没有做网络异常捕获处理&#xff0c;想本地测试网络接口&#xff0c;希望网络接口返回Http的错误码 比如502、400、401、402 2 解决办法 1、pc安装Fiddler Everywhere 2、让Fiddler Everywhere支持抓http和https的包 3、保持手机和电脑同一个局域网&am…

12c分页查询特性FETCH FIRST ROWS,OFFSET ROWS FETCH NEXT ROW LIMIT Clause子句

Database 12c的FETCH FIRST ROWS特性可以简化老版本中ROW_NUM()或ROWNUM的分页排序写法&#xff0c; 大幅节约开发花在分页查询语句上的时间。 row-limiting子句用以限制某个查询返回的行数 可以通过FETCH FIRST/NEXT关键字指定返回结果的行数可以通过PERCENT关键字指定返回结果…

tomcat结合nginx使用小结

tomcat结合nginx部署 相信很多人都听过nginx&#xff0c;这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢&#xff1f;可能很多人未必了解。 说到反向代理&#xff0c;可能很多人都听说&#xff0c;但具体什么是反向代理&#xff0c;很多人估计就不清楚了。…

如何学好GIS,彻底领悟这几句话就够了!!!

目 录前言1. GIS起源于地图学2. GISer心中要有地图3. 空间数据是GIS的血液4. 空间分析是GIS的灵魂5. GIS是智慧城市的操作系统前言 地理信息系统 &#xff08;GIS&#xff09;是以可视化和分析地理配准信息为目的&#xff0c;用于描述和表征地球及其他地理现象的一种系统。 地…

【iVX 初级工程师培训教程 10篇文拿证】07 08 新闻页制作

目录 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照 【iV…

【WEB API项目实战干货系列】- WEB API入门(一)

这篇做为这个系列的第一篇&#xff0c;做基本的介绍&#xff0c;有经验的人可以直接跳到第二部分创建 ProductController。创建 Web API 项目 在这里我们使用VS2013, .NET 4.5.1创建一个Web API 2的项目选择项目WEB API模板, 在最下方的MVC主要是默认会自带微软的API Helper, 使…

父元素 高度固定,如何使其中的文字垂直居中?

方法一&#xff1a; 设置父元素高度&#xff0c;设置子元素行高垂直居中 <style> *{padding: 0;margin:0;font-size: 12px;} div{float: left;width: 200px;height:200px;margin: 10px;border:1px solid blue; line-height: 200px;} span{display: inline-block;verti…

Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去

1 需求 打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去 2 效果爆照如下 打开这个DialogFragment 3 关键代码实现 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)…

驱动介绍

关于驱动驱动&#xff08;也称连接器&#xff09;是对传统的数据采集程序的标准化&#xff0c;驱动可以作为你的资产进行管理系统为每个设备创建一个驱动实例通过反射创建驱动实例驱动不可以是静态的驱动要继承IDriver接口驱动内需要通过web配置的属性(支持枚举等基本类型),上要…

【iVX 初级工程师培训教程 10篇文拿证】06 数据库及服务

目录 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照 【iV…

memcached安装和php扩展memcache安装

1.准备安装包: libevent-2.1.8-stable.tar.gz memcached-1.5.0.tar.gz memcache-2.2.7.tgz 2.安装libevent tar xf /opt/libevent-2.1.8-stable.tar.gz cd libevent-2.1.8-stable mkdir /usr/local/libevent ./configure --prefix/usr/local/libevent make && make …

J2EE开发技术点4:ajax技术

前言 AJAX 是在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术。需要知道的是&#xff0c;Ajax技术并不是一项新的技术&#xff0c;而是使用现有技术解决问题的新方法。Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;也叫异步Jav…

【WEB API项目实战干货系列】- 接口文档与在线测试(二)

这一篇我们主要介绍如何做API帮助文档&#xff0c;给API的调用人员介绍各个 API的功能, 输入参数&#xff0c;输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档及在线测试最终达到的效果: 概要图GET API添加产品API:删除产品 …

IOS多线程

http://www.jianshu.com/p/0b0d9b1f1f19 首页专题下载手机应用显示模式登录注册登录添加关注作者 伯恩的遗产 2015.07.29 00:37* 写了35249字&#xff0c;被2296人关注&#xff0c;获得了1668个喜欢关于iOS多线程&#xff0c;你看我就够了 字数8596 阅读92152 评论153 喜欢905在…

Android之提示Failed to load WebView provider: No WebView installed

1 问题 Fatal Exception: android.util.AndroidRuntimeException: android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installedat android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:435)at a…