刚刚接触的LINQ

科普一下:

语言集成查询(Language INtegrated Query,LINQ)

是一项微软技术,新增一种自然查询的SQL语法到.NET Framework的编程语言中,可支持Visual Basic .NET以及C#语言。

 

LINQ定义了大约40个查询操作符,如select、from、in、where以及order by(C#中)。

使用这些操作符可以编写查询语句。不过,这些查询还可以基于很多类型的数据,每个数据类型都需要一个单独的LINQ类型。

基础语法:

  • LINQ的关键词:from, select, in, where, group by, orderby, …
  • LINQ的注意点:必须以select或者是group by 结束。
  • LINQ的写法:

1)from 临时变量 in 实现IEnumerable<T>接口的对象

where条件表达式

[orderby条件]

[group by 条件]

select 临时变量中被查询的值

2) 实现IEnumerable接口的对象.LINQ方法名(lambda表达式)。如:

string input = "hellow world";

int count = input.Count(w=>w == 'o'); //查询字母o出现的次数

能够使用LINQ的对象需要实现IEnumerable<T>接口。并且LINQ的查询表达式是在一次创建对象时才被编译的。

  • LINQ的全称:Language-Integrated Query
  • 命名空间:System.Linq;

  注意:Linq是在.NET Framework 3.5 中出现的技术,所以在创建新项目的时候必须要选3.5或者更高版本,否则无法使用。

  选择3.5或更高版本的.NET Framework之后,创建的新项目中会自动包含System.Linq的命名空间。

接着看代码实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace LINQ
{public class Category{public int Age { get; set; }public string Prase { get; set; }}public class Program{static void Main(string[] args){//对数据集合的操作List<string> names = new List<string> { "Tom", "Jack", "Jim", "Jackson", "Key", "Kitty" };var nameJ = from n in names where n.StartsWith("J") orderby n select n;foreach (var name in nameJ){Console.WriteLine(name);}Console.WriteLine("-------------------------");names.Add("Jack1");names.Add("Jack2");names.Add("Jack3");foreach (string name in nameJ){Console.WriteLine(name);}Console.WriteLine("-------------------------");List<Category> cs = new List<Category>() { new Category{Age=22,Prase="13期"},new Category{Age=22,Prase="12期"},new Category{Age=22,Prase="14期"},new Category{Age=23,Prase="14期"},new Category{Age=20,Prase="13期"},new Category{Age=24,Prase="14期"},new Category{Age=25,Prase="14期"},new Category{Age=23,Prase="13期"},new Category{Age=25,Prase="14期"}};var s = (from s1 in cs where s1.Age > 21 && s1.Prase == "14期" orderby s1.Age descending select s1).Take(3);foreach (var c1 in s){Console.WriteLine(c1.Age + " " + c1.Prase);}Console.WriteLine("-------------------------");var ss = from s1 in csgroup s1 by s1.Prase into corderby c.Count() descending, c.Keywhere c.Count() >= 2select c.Key + c.Count();foreach (var s1 in ss){Console.WriteLine(s1);}Console.WriteLine("-------------------------");object[] data = { "hello",33,"what",36,"fine",39,"thanks"};var str = data.OfType<string>();foreach (var a in str){Console.WriteLine(a);}Console.ReadKey();}}
}

  

上述代码除了LINQ查询语法外,其他都是我们所熟悉的语法,而LINQ查询语法跟SQL查询语法很相似,除了先后顺序。

  Q:为何 LINQ 查询语法是以 from 关键字开头的,而不是以 select 关键字开头的?select 开头这种写法跟SQL的写法更接近,更易懂呀?

  A:简单来说,为了IDE的智能感知(Intelisence)这个功能,select 关键字放在后面了。

  其中的 into 关键字表示 将前一个查询的结果视为后续查询的生成器,这里是跟 group by 一起使用的。

  LINQ中的Group by不要跟 SQL 中的Group by 混淆,SQL由于是二维结构,Group by 的一些逻辑受二维结构的约束,无法像 LINQ 中的Group by 这么灵活。

  事实上,LINQ的查询语法存在以下两种形式:

  查询方法方式:(Methord Syntax)

  主要利用System.Linq.Enumerable类中定义的扩展方法和Lambda表达式方式进行查询

     参考文档:Lambda 表达式(C# 编程指南):https://msdn.microsoft.com/zh-cn/library/bb397687.aspx

  查询语句方式:(Query Syntax)一种更接近SQL语法的查询方式,可读性更好。

使用优点:

  1、无需复杂学习过程即可上手

  2、编写更少代码即可创建完整应用。

  3、更快开发错误更少的应用程序。

  4、无需求助奇怪的编程技巧就可合并数据源。

  5、让新开发者开发效率更高。

  6、任何对象或数据源都可以定制实现Linq 适配器,为数据交互带来真正方便。

函数支持:

支持以下公共语言运行时 (CLR) 方法和属性,因为它们可以在查询表达式中进行转换以包含在OData服务的请求 URI 中:

String成员支持的 OData 函数
  Concat  string,concat(string,p0,string,p1)
  Contains  bool,substringof(string,p0,string,p1)
  EndsWith  bool,endswith(string,p0,string,p1)
  IndexOf  int,indexof(string,p0,string,p1)
  Length  int,length(string,p0)
  Replace  string,replace(string,p0,string,find,string,replace)
  Substring  string,substring(string,p0,int,pos)
  Substring  string,substring(string,p0,int,pos,int,length)
  ToLower  string,tolower(string,p0)
  ToUpper  string,toupper(string,p0)
  Trim  string,trim(string,p0)
DateTime成员1支持的 OData 函数
  Day  int,day(DateTime,p0)
  Hour  int,hour(DateTime,p0)
  Minute  int,minute(DateTime,p0)
  Month  int,month(DateTime,p0)
  Second  int,second(DateTime,p0)
  Year  int,year(DateTime,p0)

  1也支持Visual Basic中等效的Microsoft.VisualBasic.DateAndTime的日期和时间属性以及DatePart方法。

Math成员支持的 OData 函数
  Ceiling  decimal,ceiling(decimal,p0)
  Ceiling  double,ceiling(double,p0)
  Floor  decimal,floor(decimal,p0)
  Floor  double,floor(double,p0)
  Round  decimal,round(decimal,p0)
  Round  double,round(double,p0)
Expression成员支持的 OData 函数
  TypeIs  bool,isof(type,p0)

  客户端或许还可以在客户端上计算其他 CLR 函数。对于无法在客户端上计算以及无法转换为有效请求URI以便在服务器上计算的任何表达式,将引发 NotSupportedException

参考文档:在 C# 中编写查询 (LINQ):https://msdn.microsoft.com/zh-cn/library/bb397900(v=VS.90).aspx?lc=2052

 

转载于:https://www.cnblogs.com/D-E-S-I-R-E/p/4573807.html

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

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

相关文章

解决Pycharm窗口一闪而过的问题

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入

存根类 测试代码 java_常规单元测试和存根–测​​试技术4

存根类 测试代码 java我的上一个博客是有关测试代码的方法以及讨论您做什么和不必进行测试的方法的一系列博客中的第三篇。 它基于我使用一种非常常见的模式从数据库检索地址的简单方案&#xff1a; …并且我提出了这样的想法&#xff0c;即任何不包含任何逻辑的类实际上都不需…

Bash脚本教程之脚本除错

目录 常见错误 bash的-x参数 环境变量 LINENO FUNCNAME BASH_SOURCE BASH_LINENO 常见错误 编写 Shell 脚本的时候,一定要考虑到命令失败的情况,否则很容易出错。 #! /bin/bashdir_name=/path/not/existcd $dir_name rm * 上面脚本中,如果目录

config.class.php,Config.class.php

defined(IN_MY_PHP) || die(0);/*** 配置文件&#xff0c;内容如下* return [* jfzt>[* // 方式一(推荐)* [val>0, label>xxx0, style>txt-danger],* [val>1, label>xxx1, style>txt-success],* // 方式二(简化&#xff0c;不支持样式)* 0>xxx0,* 1>…

Python学习手册

目录 基础语法 模块的使用 Python案例 基础语法 PyCharm调试程序python手动安装依赖包python中让输出不换行Python中的输入(input)和输出打印python中实现打印特定字符变换Python中的变量和数据类型Python中的列表ListPython中的字典dictPython中数据的排序Python中数据类型的转…

Bash脚本教程之mktemp 命令,trap 命令

目录 临时文件的安全问题 mktemp 命令的用法 mktemp 命令的参数 trap 命令 Bash 脚本有时需要创建临时文件或临时目录。常见的做法是,在/tmp目录里面创建文件或目录,这样做有很多弊端,使用mktemp命令是最安全的做法。 临时文件的安全问题 直接创建临时文件,尤其在/tm…

ubuntu vim php配置文件在哪,ubuntu vim的配置文件在哪

当我们使用Vim时, 你需要知道一系列的配置文件. 这些配置文件的位置依赖于Vim的安装位置和你所使用的操作系统.通常, 有三个配置文件, 你是必须知道在哪里能找到的.vimrc这是Vim最主要的配置文件. 它有两个版本, 全局版本(global)和用户版本(personal)).全局vimrc文件放在你安装…

使用 Python 爬取网页数据

在需要过去一些网页上的信息的时候&#xff0c;使用 Python 写爬虫来爬取十分方便。 1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集网络数据的…

Bash脚本教程之启动环境

目录 Session 登录 Session 非登录 Session .bash_logout 启动选项 键盘绑定 Session 用户每次使用 Shell,都会开启一个与 Shell 的 Session(对话)。 Session 有两种类型:登录 Session 和非登录 Session,也可以叫做 login shell 和 non-login shell。 登录 Session…

多线程(初级篇)

相关概念进程是指一个内存中运行的应用程序&#xff0c;每个进程都有自己独立的一块内存空间&#xff0c;一个进程中可以启动多个线程。一个进程是一个独立的运行环境&#xff0c;它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了…

了解ADF生命周期中的ADF绑定

在本文中&#xff0c;我将重点介绍ADF绑定层&#xff0c;并探讨当最初从浏览器请求带有某些数据的ADF页面时&#xff0c;它如何工作。 Oracle ADF提供了自己的JSF生命周期扩展版。 实际上&#xff0c;ADF扩展了标准JSF生命周期实现类&#xff0c;并提供了ADF阶段侦听器&#x…

绕过 WAF:绕过一些 WAF 设备的 Burp 插件

我写了这个插件使用的技术博客文章在这里一会儿回来。如果存在特定标头&#xff0c;许多 WAF 设备可能会被诱骗相信请求来自自身&#xff0c;因此是可信的。绕过方法的基础知识可以在此处的 HP 博客文章中找到。 一段时间以来&#xff0c;我一直在 Burp 中实施匹配/替换规则&…

Bash脚本教程之命令提示符

目录 环境变量 PS1 颜色 环境变量 PS2,PS3,PS4 用户进入 Bash 以后,Bash 会显示一个命令提示符,用来提示用户在该位置后面输入命令。 环境变量 PS1 命令提示符通常是美元符号$,对于根用户则是井号#。这个符号是环境变量PS1决定的,执行下面的命令,可以看到当前命令提…

windows apache部署php,Windows下部署Apache+PHP+MySQL运行环境实战

首先是MySQL&#xff0c;(这边吐槽一下被Oracle收购的MySQL)一步一步往下&#xff0c;无需更多的配置然后安装Apache&#xff0c;也是一步一步往下安装PHP&#xff0c;(我偷懒我自豪, 在PHP下载页面找那个Installer的文件.......吐槽可能不是最新的版本 &#xff5e;)下载页面安…

粉丝提问:有没有人会做彩虹表

彩虹表就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合&#xff0c;不一定是针对MD5算法的&#xff0c;各种算法的都有&#xff0c;有了它可以快速的破解各类密码。越是复杂的密码&#xff0c;需要的彩虹表就越大&#xff0c;现在主流的彩虹表都是100G以上。 …

javax.cache_新的Java缓存标准(javax.cache)

javax.cache这篇文章探讨了新的Java缓存标准&#xff1a;javax.cache。 它如何适应Java生态系统 该标准由JSR107开发&#xff0c;作者是共同规范负责人。 JSR107包含在JSR342开发的Java EE 7中。 Java EE 7将于2012年底完成。但是与此同时&#xff0c;javax.cache将在Java SE …

oracle修改某表中的顺序,oracle 数据库 , 表中字段顺序修改

1.首先需要sys或者system权限操作2.查询需要更改的表的IDselect object_id from all_objects where owner ‘用户名‘ and object_name ‘tableName‘; 注&#xff1a;表名需要大写3.通过ID查询出该表所有字段的顺序select obj# , col# , name from sys.col$ where obj# ‘…

clearfix清除浮动

在开发html页面时&#xff0c;我们经常会用到css的清除浮动&#xff0c;这里我推荐一种版本的清除方法&#xff0c;个人感觉非常好用。 .clearfix:before,.clearfix:after{content:"";display:table; } .clearfix:after{clear:both;} .clearfix{*zoom:1; } 1 <!DO…

fofa自动化爬虫脚本更新+详解

fofa自动化爬虫脚本更新详解 起因 最近要用到fofa爬虫&#xff0c;为什么要用爬虫不用api&#xff0c;问就是穷&#xff0c;想起来之前写过一个相关的脚本&#xff1a;Fofa-python-脚本&#xff0c;是很久以前写的了&#xff0c;之前写的时候有点问题&#xff0c;昨天重新修…

【APICloud系列|16】苹果开发者账号如何更改双重认证的手机号

按照一般的更改流程&#xff1a; 现在苹果账号安全系统升级&#xff0c;一般需要同意协议或者和本公司密切相关的人员才能操作。我这种借苹果手机操作的人除外。 那我用win7电脑如何操作呢&#xff1f; 登录苹果开发者账号&#xff0c; 进入如下管理账号地址&#xff1a;htt…