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写法的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. 白话LINQ系列1---什么是LINQ?

    一.本系列目标 1.理解LINQ: 2.能写得复杂的LINQ语句(比如:动态查询): 3.理解表达式树及相关概念: 4.熟练运用LINQ写出优美的代码(希望一起努力,最终达到): 二.LINQ为何物? ...

  3. Linq之旅:Linq入门详解(Linq to Objects)【转】

    http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html Linq之旅:Linq入门详解(Linq to Objects) 示例代码下载:Linq之 ...

  4. Linq之旅:Linq入门详解(Linq to Objects)(转)

    http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html 示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细 ...

  5. LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”

    我就不屁话,能一张图就解决的就不说话了 2015-03-28 14:53:24,440 [10] ERROR log - System.NotSupportedException: LINQ to E ...

  6. LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”(笔记)

    今天使用使用动态查询的时候出现出现错误“LINQ to Entities 不支持 LINQ 表达式节点类型‘Invoke’.”,代码如下: IQueryable<CUSTOMER> que ...

  7. linq世界走一走(LINQ TO SQL)

    前言:作为linq的一个组件,同时作为ADO.NET的一个组成部分,LINQ TO SQL提供了将关系数据映射为对象的运行时基础结构. LINQ TO SQL是通过将关系数据库对象的数据模型(如一个数 ...

  8. Linq世界走一走(LINQ TO XML)

    前言:Linq to xml是一种使用XML的新方法.从本质上来说,它采用了多种当前使用的XML处理技术,如DOM和XPath,并直接在.NET Framework内将它们组合为一个单一的编程接口.L ...

  9. linq字符串搜索条件,排序条件-linq动态查询语句 Dynamic LINQ

    在做搜索和排序的时候,往往是前台传过来的字符串做条件,参数的数量还不定,这就需要用拼sql语句一样拼linq语句.而linq语句又是强类型的,不能用字符串拼出来. 现在好了,有个开源的linq扩展方法 ...

  10. LINQ之路16:LINQ Operators之集合运算符、Zip操作符、转换方法、生成器方法

    本篇将是关于LINQ Operators的最后一篇,包括:集合运算符(Set Operators).Zip操作符.转换方法(Conversion Methods).生成器方法(Generation M ...

随机推荐

  1. Android:百度地图 + 百度导航

    地图SDK 开发指南:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction 导航SDK开发指南:http://lb ...

  2. Java第一次作业

    (一)学习总结 1.在java中通过Scanner类完成控制台的输入,Scanner类实现基本数据输入的方法是什么? import java.util.Scanner; System.out.prin ...

  3. php人员权限管理(RBAC)

    在说权限管理前,应该先知道权限管理要有哪些功能: (1).用户只能访问,指定的控制器,指定的方法 (2).用户可以存在于多个用户组里 (3).用户组可以选择,指定的控制器,指定的方法  (4).可以添 ...

  4. Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...

  5. TCP的三次握手(建立连接)与 四次挥手(关闭连接)

    一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: TCP报文格式上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位 ...

  6. jmeter配置、安装

    一. 工具描述 apache jmeter是100%的java桌面应用程序,它被设计用来加载被测试软件功能特性.度量被测试软件的性能.设计jmeter的初衷是测试web应用,后来又扩充了其它的功能.j ...

  7. java封装的方法

    java封装是由Java是面向对象程序设计语言的性质决定的,面向对象程序设计语言的三大特性之一就是封装.封装其实就是包装的意思,从专业的角度来看,就是把对象的所有组成部分组合在一起,保护私有属性. 如 ...

  8. crontab的定时任务不能自动执行,但是手动执行脚本一直能成功

    crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...

  9. Zkdash安装

    zkdash是一个zookeeper的管理界面,也可以作为任何基于zookeeper的配置管理工具,比如:Qconf 1.拉取代码 #git clone https://github.com/irea ...

  10. OpenCV局部变形算法探究

    OpenCV是跨平台的强大的计算机视觉识别和图像处理的开源库,可以利用他来实现:模式识别.构建神经网络.深度学习,总之用途多多,入门级就先做一下图像处理吧! 基本的图像处理算法(图像灰阶化.二值化.仿 ...