linq 为什么要用linq linq写法
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。(百度百科)
我们为什么要用linq ,在平常的数据库查询中我们一直用的都是SQL语句,sql语句就是用字符串查询,这样子我们就没有办法确保字符串的类型。字符串查询还有一个缺点就是容易被利用,sql
语句在某些情况下是真确的但是却不符合查询所需要的内容,比如有一张学生信息表,现在想查询全部的学生信息,简单语句如下
select *from tableName
然后我们要给这个查询添加一个条件
where条件很简单,只是查询id=1;假设我们把id=1+1执行,这个语句会不会报错呢?如果你的id是int型的,那么就不会报错,所以,普通的查询是由就表现出了他的局限性。所以我们才会用linq
先写一个简单的linq例子,然后我们再解释linq
static void Main(string[] args) { , , ,,, , , , , , , }; var query = from num in number == orderby num ascending select num; foreach (var i in query) { Console.Write("{0}\t", i); } Console.ReadLine(); }运行结果:2 4 6 8
这个例子是不是看起来很像sql语句,这个就是linq语句,linq语句特点就是把需要查询的对象用变量直接表示,变量是有类型的,这样子就无法随便输入,
下来我们就来解释一下这个例子,我们首先定义了一个数据源,然后linq语句赋值给query,查询的内容我想大家都明白,就是查询数组中%2=0的数并升序排序。然后遍历执行。
还有一种写法就是
number.Where(n => n % == ).OrderBy(n => n);
这两种写法表示的都是一样的结果。
在这里我强调一点:在.NET中,任何数据结构都是由在mscorlib.dll中System.Collections.Generic命名空间下的Ienumerable<T>接口得到的;
我们再来看一个例子:
首先我们先写一个Person类
class Person { private string name; public string Name { get { return name; } set { name = value; } } private string address; public string Address { get { return address; } set { address = value; } } private int age; public int Age { get { return age; } set { age = value; } }
然后
static void Main(string[] args) { //DefaultIfEmpty 这个方法会返回一个IEnumerable<T>类型的元素或者当序列(集合)为空事放回一个默认的单例集合. IList<Person> person = new List<Person>(); List<int> number = new List<int>(); IList<string> name = new List<string>(); var defaultPersons = person.DefaultIfEmpty(); var defaultNumbers = number.DefaultIfEmpty(); var defaultNames = name.DefaultIfEmpty(); Console.WriteLine("" + defaultNumbers + defaultNames); Console.ReadKey(); }
这就是上面代码执行的结果:System.Linq.Enumerable+<DefaultIfEmptyIterator>d__90`1[System.Int32]System.Linq.Enumerable+<DefaultIfEmptyIterator>d__90`1[System.String]
在.net中,通过实体类可以来确定查询对象的类型,这就确保了数据的安全性,这就是linq的优点。
下面我列举linq所包含的一些方法,具体大家下来自己查阅资料使用。
static void Main(string[] arge) { //All 这个方法确定是否所有元素序列都满足某种条件, //如果每一个元素都可以满足设定的特殊条件或者它是空,则方法返回true,否则返回false。 IList<string> number = new List<string>(){ "One","Two","Three","Four","Five","Six","Seven"}; )) { Console.WriteLine("所有数字至少有三个字符 ."); } //Any 这个方法确定序列中的元素是否存在或者满足某种特定的条件。 if (number.Any<string>()) { Console.WriteLine("序列包含项目."); } )) { Console.WriteLine("序列包含至少一项具有三个或更多字符"); } //Distinct 这个方法将从序列(集合)中返回去重复(Distinct)元素 IList<, , , , , , , , }; var distinctedList = list.Distinct().ToList(); distinctedList.ForEach(x => Console.WriteLine(x)); Console.ReadKey(); }
/* *ElementAt *在序列(集合)中,这个方法返回一个特定索引的一个元素.这个方法的定义是: *public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index) *public static TSource ElementAtOrDefault<TSource>(this IEnumerable<TSource> source, int index) */ /* Empty Empty返回一个指定类型参数的空Ienumerable<T>. 方法定义如下: public static IEnumerable<TResult> Empty<TResult>() */ /* Except方法可以用在从一个集合中删除一个项集合.它放回一个由两个序列产生的集合差.方法定义是: public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer) */ /* First 这个方法会返回序列中的第一个元素.方法定义是: public static TSource First<TSource>(this IEnumerable<TSource> source) public static TSource First<TSource>(this IEnumerable<TSource> source,Func<TSource, bool> predicate) */ //FirstOrDefault //它返回序列中第一个元素或者当没有元素未被找到时放回默认值.这个方法是First和Default的综合 /* Union 这个方法将会Union(并集)两个序列(集合).例如,我们有两个集合,A={1,2,3,4,5,6,7}和B={5,6,7,8,9},并集A和B则返回{1,2,3,4,5,6,7,8,9}.在.NET中,它将连接两个列表(集合)并生成一个新列表(集合). public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first,IEnumerable<TSource> second, IEqualityComparer<TSource> comparer) */
linq今天就说到这里,我说的都是简单的用法和linq的一个优点,安全性。要是有错误,希望大家指出来。感谢!
linq 为什么要用linq linq写法的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 白话LINQ系列1---什么是LINQ?
一.本系列目标 1.理解LINQ: 2.能写得复杂的LINQ语句(比如:动态查询): 3.理解表达式树及相关概念: 4.熟练运用LINQ写出优美的代码(希望一起努力,最终达到): 二.LINQ为何物? ...
- Linq之旅:Linq入门详解(Linq to Objects)【转】
http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html Linq之旅:Linq入门详解(Linq to Objects) 示例代码下载:Linq之 ...
- Linq之旅:Linq入门详解(Linq to Objects)(转)
http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html 示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细 ...
- LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”
我就不屁话,能一张图就解决的就不说话了 2015-03-28 14:53:24,440 [10] ERROR log - System.NotSupportedException: LINQ to E ...
- LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”(笔记)
今天使用使用动态查询的时候出现出现错误“LINQ to Entities 不支持 LINQ 表达式节点类型‘Invoke’.”,代码如下: IQueryable<CUSTOMER> que ...
- linq世界走一走(LINQ TO SQL)
前言:作为linq的一个组件,同时作为ADO.NET的一个组成部分,LINQ TO SQL提供了将关系数据映射为对象的运行时基础结构. LINQ TO SQL是通过将关系数据库对象的数据模型(如一个数 ...
- Linq世界走一走(LINQ TO XML)
前言:Linq to xml是一种使用XML的新方法.从本质上来说,它采用了多种当前使用的XML处理技术,如DOM和XPath,并直接在.NET Framework内将它们组合为一个单一的编程接口.L ...
- linq字符串搜索条件,排序条件-linq动态查询语句 Dynamic LINQ
在做搜索和排序的时候,往往是前台传过来的字符串做条件,参数的数量还不定,这就需要用拼sql语句一样拼linq语句.而linq语句又是强类型的,不能用字符串拼出来. 现在好了,有个开源的linq扩展方法 ...
- LINQ之路16:LINQ Operators之集合运算符、Zip操作符、转换方法、生成器方法
本篇将是关于LINQ Operators的最后一篇,包括:集合运算符(Set Operators).Zip操作符.转换方法(Conversion Methods).生成器方法(Generation M ...
随机推荐
- 循环单词 java
链接:https://www.nowcoder.com/questionTerminal/9d5fbe7750a34d0b91c73943f93b2d7d来源:牛客网如果一个单词通过循环右移获得的单词 ...
- 详解JDBC连接数据库
一.概念 1. 为了能让程序操作数据库,对数据库中的表进行操作,每一种数据库都会提供一套连接和操作该数据库的驱动,而且每种数据库的驱动都各不相同,例如mysql数据库使用mysql驱动,oracle数 ...
- (25)IO流之转换流InputStreamReader和OutputStreamWriter
InputStreamReader:字节到字符的桥梁. OutputStreamWriter:字符到字节的桥梁. 它们有转换作用,而本身又是字符流.所以在构造的时候,需要传入字节流对象进来. 构造函数 ...
- 利用python的爬虫技术爬去糗事百科的段子
初次学习爬虫技术,在知乎上看了如何爬去糗事百科的段子,于是打算自己也做一个. 实现目标:1,爬取到糗事百科的段子 2,实现每次爬去一个段子,每按一次回车爬取到下一页 技术实现:基于python的实现, ...
- 2017-3-22 HTML 表单 、框架
表单:<form action="" method="get/post" ></form> 表单元素:12个 1.文本类 文本框:< ...
- CSS中清除浮动的方法
CSS浮动,最早是为了达到文字环绕的效果提出的,也可以用来做布局,但是布局会产生很多问题(高度塌陷,漂浮在普通流上),会使当前标签产生上浮的效果,会影响前后标签,同样的代码在不同的浏览器的兼容性也不一 ...
- JavaScript 简介及语法语句
JS脚本语言 全称JavaScript:网页里面使用的脚本语言 非常强大的语言 基础语法 注释语法 单行注释// 多行注释/**/输出语法 ...
- Android -- 贝塞尔曲线公式的推导
1,最近看了几个不错的自定义view,发现里面都会涉及到贝塞尔曲线知识,深刻的了解到贝塞尔曲线是进阶自定义view的一座大山,so,今天先和大家来了解了解. 2,贝塞尔曲线作用十分广泛,简单举几个的栗 ...
- js复制内容到剪切板,兼容pc和手机端,支持Safari浏览器
最近,一些项目中用到监听用户复制.剪切的操作. 案例1.在PC端,当用户获得一个京东卡的使用券,当用户使用ctrl + C复制得到的使用券时,将使用券的代号复制到粘贴板,以便于用户ctrl+v进行 ...
- SQL case when 的使用总结
在网上看到一篇关于case when语句的博客,写得很好,我这里是摘录的,还有我的一些体会,原博客地址:SQL Case when 的使用方法. Case具有两种格式.简单Case函数和Case搜索函 ...