学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习?

一、LINQ简介

1、什么是LINQ?

  什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated Query),更通俗的讲,它相当于一个通用的数据查询接口。LINQ最初由Anders hejlsberg构思,2007年11月19日,

LINQ作为.NET FrameWork3.5的一部分正式发布,同时微软也将LINQ集成到了Visual Studio 2008中,这一巨大的创新,实现了面向对象和数据访问的互通有无。

2、LINQ主要解决什么问题?

  我们知道在LINQ之前,面向对象和数据访问这两个领域是相互分裂的,编程语言中的数据类型,和数据库中的数据类型也有一些出入,同时SQL和XML都有自己的查询语言

而对象却没有自己的查询语言,这些在很大程度上限制开发的效率,而LINQ的设计理念就是在不同类型的数据之间(关系数据、层次模型数据等)之间实现数据访问的互通有无,

为不同的数据类型提供统一的访问接口。

3、学习LINQ需要做哪些基本准备

  在开始学习LINQ之前,我们需要先来了解下理解C# 3.0的一些新特性:隐含类型局部变量、自动属性、对象初始化器、集合初始化器、匿名类型、Lambda表达式、

扩展方法、局部方法、yield和IEnumerable接口、查询语法等

二、LINQ查询分类

1、Linq to Objects

  主要负责对象查询

2、Linq to XML

  主要负责XML查询

3、LInq to ADO.Net

  主要负责数据库查询,Linq to ado.Net 又分为Linq to Sql(语法查询),Linq to DataSet(数据查询),Linq to Entity(实体查询)

三、基础知识的学习

1、隐含类型局部变量

  隐含类型var, 我们都知道Javascript是一种弱类型的语言,所以在运行的时候才会更加的灵活。我们现在所接触的语言大部分都是强类型的语言,

所谓强类型的语言,就是程序声明的变量、实例化对象,必须有明确的类型规定,这样在编译的时候就为其分配一定的内存空间,这样的话代码的

的安全性就比较高,为了提高程序的运行效率和灵活性,微软也把var给引进了进来

        static void Main(string[] args)
{ #region 隐含类型变量var用法 //定义 string
var name = "张晓峰";
//定义 int
var age = ;
//定义 string[]
var peoples = new[] { "张三", "李四", "王五" };
//输出保存的值
Console.WriteLine("名字:"+name);
Console.WriteLine("年龄:" + age);
foreach (var p in peoples) {
Console.WriteLine("姓名:"+ p);
} #endregion //保证控制台不一闪而过
Console.ReadLine();
}

输出结果:

编译器可以自动识别隐含类型的局部变量,但是前提是变量必须有值,但是在使用null之前,必须要确定类型,例如:var test=(string)null;

这样编译器可以自动的推断值类型,如果单纯的为test=null,则编译器无法识别其类型。

2、自动属性

以前定义一个类中属性和方法需这样写

   public class People
{
private string name;
private string sex;
private int age; public string Name {
get { return name; }
set { name = value; }
} public string Sex {
get { return sex; }
set { sex = value; }
} public int Age {
get { return age; }
set { age = value; }
}
}

使用自动属性后,可以这样写,效果是同样的

   public class People
{
public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; }
}

3、对象初始化器

对象初始化器C#3.0之前和之后语法对比

        static void Main(string[] args)
{ #region 对象初始化器的使用 //C#3.0之前的用法
People p1 = new People();
p1.Name = "张三";
p1.Sex = "男";
p1.Age = ; //C#3.0之后用法
People p2 = new People() { Name = "李四", Sex = "女", Age = }; //输出信息
Console.WriteLine("人员信息:");
Console.WriteLine("姓名:"+p1.Name+",性别:"+p1.Sex+",年龄:"+p1.Age);
Console.WriteLine("姓名:" + p2.Name + ",性别:" + p2.Sex + ",年龄:" + p2.Age); #endregion //保证控制台不一闪而过
Console.ReadLine(); }

输出结果:

4、集合初始化器

集合初始化器C#3.0之前和之后写法比较

        static void Main(string[] args)
{ #region 集合对象初始化器的使用 //C#3.0之前的用法
List<People> peoples = new List<People>();
People p1 = new People();
p1.Name = "张三";
p1.Sex = "男";
p1.Age = ;
People p2 = new People();
p2.Name = "李四";
p2.Sex = "女";
p2.Age = ;
peoples.Add(p1);
peoples.Add(p2);
//输出人员信息
Console.WriteLine("人员信息如下:");
foreach (People p in peoples)
{
Console.WriteLine("姓名:" + p.Name + ",性别:" + p.Sex + ",年龄:" + p.Age);
} //C#3.0之后用法 List<People> people1s = new List<People>() {
new People() { Name="王五",Sex="男",Age=},
new People() { Name="赵六",Sex="女",Age=}
}; //输出人员信息
Console.WriteLine("\n人员信息如下:");
foreach (People p in people1s)
{
Console.WriteLine("姓名:" + p.Name + ",性别:" + p.Sex + ",年龄:" + p.Age);
} #endregion //保证控制台不一闪而过
Console.ReadLine(); }

输出结果:

5、匿名类型

和隐含类型的局部变量一样,匿名类型就是开发者自定义类型,无须显示定义。在LINQ中匿名类会常常用到。

使用方法如下:

        static void Main(string[] args)
{
#region 匿名类型使用 var name = "玛丽";
var sex = "女";
var age = ;
//匿名类型(实体类)
var people = new{ Name = name, Sex = sex, Age = age};
//输出信息
Console.WriteLine("姓名:" + people.Name + ",性别:" + people.Sex + ",年龄:" + people.Age); #endregion //保证控制台不一闪而过
Console.ReadLine(); }

输出结果:

6、Lambea表达式

  Lambda表达式是由委托-->匿名函数-->Lambda表达式一步步过度而来的

 

7、扩展方法

  扩展方法多用于对CLR类型一些操作的扩展,在3.0之前如果要实现这些操作,一般都是建

一下辅助类,扩展方法能方便的实现这些公共。

7.1、定义扩展方法需要注意的地方:

1)扩展方法只能只在静态类中定义并且是静态方法,

2)扩展方法不能与原有方法名冲突,否则将无效

3)扩展方法的参数必须为(this扩展类的类实例,Parameter p)7.2、例子实例

    class Program
{ static void Main(string[] args)
{ Console.WriteLine("LiSha".ShowLove());
Console.ReadLine();
}
} #region string的扩展类 public static class ExensionString
{
public static string ShowLove(this string s)
{
return "I Love," + s;
}
}
#endregion

结果如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKQAAABDCAIAAACdljksAAABhUlEQVR4nO3bXY6CMBRAYZbKYlyIS+nOZh5MiGJ7vZjyY8/5nlCrVA4UM8lMt/v8J4bJ2BzGBjE2iLFBjA1ibBBjg0y3+zwJwtggw8QupZRS+o4czSN2eRW/JTmsu3i/rZeqXw0d+yF/CM46WFv3uxpv7HnZNvbg9oi9WlGfl9D3pTh/+wj22/qEYHzrXWfdpI7QPXb16slsZybw8SSrPlk9CarTCOY2gr6xM8vmwbGXlzbtd8yL+5jYy3ZrzUwunl/HXg2I51md6ghOj53cY2Z89QKtPty6Ag2iS+yP97/kM8/vrU4mPlc6xh55Gd+6lsbLbzLV+6fFg4P9tiYTDw4eBt/ih132z6WjHegruGZsS+/imrG1C2ODGBvE2CDGBjE2iLFBjA1ibBBjgxgbJPj3n7Onpt6MDWJsEGOD+AMNxNggxgYxNoixQYwNYmwQY4MYG8TYIMYGMTaIsUGMDWJsEGODGBvE2CDGBjE2iLFBjA1ibBBjgxgbxNggxgYxNoixOf4Bl3O8ZLu7lJ4AAAAASUVORK5CYII=" alt="" width="140" height="57" />

8、局部方法

  谈到局部方法,首先要说一下局部类,局部类是用partial修饰的类,可以由多个partial修饰的同名类组合成一个类,局部方法是3.0以后加入的特性,局部方法必须定义在局部类中,但是局部方法的定义和实现可以分开。在这里同时要注意,局部方法的返回值必须是静态的,返回值必须是void,可以有参也可以无参,有无方法实现均可。

9、yieId

10、IEnumerable接口

Ps:

学习网址:http://blog.csdn.net/xuemoyao/article/details/8047513

  

Linq的简介和基础知识学习的更多相关文章

  1. AXAJ基础知识学习

    AXAJ基础知识学习 博客首页 Ajax简介 ajxa全称是Asynchronous Javascript And XML ,就是异步的JS 和XML 通过Ajax可以再浏览器中向服务器发送异步请求, ...

  2. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  3. (转)Linux基础知识学习

    Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...

  4. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  5. Vue2基础知识学习

    Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...

  6. C#基础知识学习

    C#基础知识整理 学习地址:http://blog.csdn.net/column/details/csarp.html

  7. 韩天峰博客 php基础知识学习记录

    http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...

  8. 〖前端开发〗HTML/CSS基础知识学习笔记

    经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> & ...

  9. java基础知识学习笔记

    本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...

随机推荐

  1. 20145306 张文锦 网络攻防 web基础

    20145306 网络攻防 web基础 实验内容 WebServer:掌握Apache启停配置修改(如监听端口)前端编程:熟悉HTML+JavaScript.了解表单的概念编写不同的HTML网页,放入 ...

  2. Beetl模板引擎入门教程

    最近项目中有个邮件发送的需求,不过要求发送的HTML格式的邮件.由于Beetl对java语言的良好支持和很好的性能,我们决定使用Beetl作为我们的模板引擎. Beetl官网已经有了很详细的教程,所以 ...

  3. 如何创建自己的python包

    写过python的人都知道python最方便也最牛的地方就是它有无数的第三方lib可以直接拿来使用,可以让编写代码变的更容易. 长用的安装第三方lib的方法有easy_install和pip,这两个的 ...

  4. HDU 5992 Finding Hotels(KD树)题解

    题意:n家旅店,每个旅店都有坐标x,y,每晚价钱z,m个客人,坐标x,y,钱c,问你每个客人最近且能住进去(非花最少钱)的旅店,一样近的选排名靠前的. 思路:KD树模板题 代码: #include&l ...

  5. UVa 10970 大块巧克力

    https://vjudge.net/problem/UVA-10970 题意: 把一个m行n列的矩形巧克力切成mn个1×1的方块,需要切几刀. 思路: 可以考虑用动态规划的方法去做,当然,最简单的是 ...

  6. Mui --- 学习笔记

    1.mui 是选择器,popover 控制显示与隐藏,toggle 自动控制显示或隐藏 function showMenu(){ //mui是选择器 mui('#menu').popover('tog ...

  7. 怎样借助Python爬虫给宝宝起个好名字--python 学习

    每个人一生中都会遇到一件事情,在事情出现之前不会关心,但是事情一旦来临就发现它极其重要,并且需要在很短的时间内做出重大决定,那就是给自己的新生宝宝起个名字. 因为要在孩子出生后两周内起个名字(需要办理 ...

  8. HDU 6124 Euler theorem

    Euler theorem 思路:找规律 a       余数                  个数 1       0 1                     2 2       0 2   ...

  9. 区间数字的按位与 Bitwise AND of Numbers Range

    2018-08-13 22:50:51 问题描述: 问题求解: 首先如果m 和 n不相等,那么必然会有至少一对奇偶数,那么必然末尾是0. 之后需要将m 和 n将右移一位,直到m 和 n相等. 本质上, ...

  10. CRISPR基因编辑

    2007年,一家酸奶公司发现一种细菌拥有抵御病毒的特殊防御机制.2012年,细菌的这种机制就被科学家阐述清楚,2013年这一领域快速增长.它被视为分子生物学的一个奇迹,事实上,它并非仅对生物学家产生革 ...