一.Var关键字

在学习Linq查询之前,我们先来学习var关键字的用法,看看微软官方的定义:从Visual C#3.0开始,在方法范围声明的变量可以具有隐式“类型” var。隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型。从这个定义我们有两点需要注意,首先用var申明的隐式类型的局部变量是强类型的,二.var的推断类型是在编译的时候确定的,不是在运行的时候。

再看看微软官方给出的两个例子:

// Example #1: var is optional when
// the select clause specifies a string
string[] words = { "apple", "strawberry", "grape", "peach", "banana" };
var wordQuery = from word in words
where word[] == 'g'
select word; // Because each element in the sequence is a string,
// not an anonymous type, var is optional here also.
foreach (string s in wordQuery)
{
Console.WriteLine(s);
}

var允许使用但不是必需的,因为查询结果的类型可以明确地表示为IEnumerable<string>

// Example #2: var is required because
// the select clause specifies an anonymous type
var custQuery = from cust in customers
where cust.City == "Phoenix"
select new { cust.Name, cust.Phone }; // var must be used because each item
// in the sequence is an anonymous type
foreach (var item in custQuery)
{
Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}

var允许结果是匿名类型的集合,除了编译器本身之外,不能访问该类型的名称。使用var消除了为结果创建新类的要求。

在第二个例子中假如不用var关键字的话我们就要事先创建好类,查询条件一变,查询结果就跟着改变,又要定义新的类型,linq查询的条件是随意变化的,不可能条件一变就声明新的类型,所以var关键字对linq查询至关重要的。

二.匿名类

创建一个对象一定要先定义这个对象的类型么,当然不是,我们可以通过匿名类的方式来创建对象,看看下面这段代码:

  static void Main(string[] args)
{
string name = "Tom";
int age = ;
var obj = new { name,age };
Console.WriteLine(obj.age.ToString() + obj.name.ToString());
Console.Read(); }

三.Linq查询

Linq查询实质是操作集合的一系列扩展方法,Linq特性的核心接口是IEnumerable,只有实现了IEnumerable接口的集合才可以用Linq查询。

Linq的查询包含三种方法:

1.使用语法查询,这种查询方式和SQL语句比较像:

// Query #1.
List<int> objInt = new List<int> { , , , , , , , , , , };
var result = from i in objInt
where i > && i <
orderby i descending
select i; foreach (var item in result)
{
Console.WriteLine(item.ToString());
} Console.Read(); // Query #2.
List<string> objListString = new List<string> { "abc", "acd", "bcv", "bcd", "cnh", "ckl", "glk" };
var strResult = from str in objListString
group str by str[];
foreach (var item in strResult)
{
foreach (var item1 in item)
{
Console.WriteLine(item1);
}
} Console.Read(); }

2.使用扩展方法查询:

某些方法查询必须表现为方法调用,最常见的此类方法是可返回单一数值的方法,例如 SumMaxMinAverage 等。 这些方法在任何查询中都必须始终最后一个调用,因为它们只表示单个值,不能用作其他查询操作的源。

扩展方法select的使用:

 static void Main(string[] args)
{
int[] nums = { , , , , , , , , }; var list = nums.Select(item => item * item);
foreach (int item in list)
{
Console.WriteLine(item);
} Console.ReadLine();
}

扩展方法Where的使用:

  static void Main(string[] args)
{
int[] nums = { , , , , , , , , }; var list = nums
.Where(item => item % == )
.Select(i => i * i); Console.ReadLine();
}

扩展方法orderby的用法:

        static void Main(string[] args)
{
int[] nums = { , , , , , , , , };
var list = nums
.Where(item => item % == )
.Select(i => i * i)
.OrderBy(item => item);
foreach (int i in list)
{
Console.WriteLine(i);
} Console.ReadLine();
}

static void Main(string[] args)
{
string[] nums = { "张勇", "王琦", "刘静", "赵鑫鑫",
"杜丽", "马俊才", "那英", "成龙", };


var list = nums
.Where(item => item.Length == 2)
.Select(item => item)
.OrderByDescending(item => item.Substring(0, 1));
foreach (string item in list)
{
Console.WriteLine(item);
}


Console.ReadLine();
}

3.结合使用查询语法和方法语法:

int numCount1 =
(from num in numbers1
where num < || num >
select num).Count();

由于查询 返回单个值而不是集合,因此查询立即执行。

浅谈Linq查询的更多相关文章

  1. [20190524]浅谈模糊查询.txt

    [20190524]浅谈模糊查询.txt --//一台生产系统遇到监听进程莫名down的情况,3月份曾经遇到的情况,链接:http://blog.itpub.net/267265/viewspace- ...

  2. LinqToDB 源码分析——轻谈Linq查询

    LinqToDB框架最大的优势应该是实现了对Linq的支持.如果少了这一个功能相信他在使用上的快感会少了一个层次.本来笔者想要直接讲解LinqToDB框架是如何实现对Linq的支持.写到一半的时候却发 ...

  3. 浅谈命令查询职责分离(CQRS)模式

    在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能 ...

  4. 转:浅谈命令查询职责分离(CQRS)模式

    原文来自于:http://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查 ...

  5. 浅谈命令查询职责分离(CQRS)模式---转载

    在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能 ...

  6. 【转】浅谈命令查询职责分离(CQRS)模式

    原文链接:https://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查 ...

  7. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  8. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  9. 浅谈SQL优化入门:1、SQL查询语句的执行顺序

    1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...

随机推荐

  1. (记录)mysql分页查询,参数化过程的坑

    在最近的工作中,由于历史遗留,一个分页查询没有参数化,被查出来有sql注入危险,所以对这个查询进行了参数化修改. 一看不知道,看了吓一跳,可能由于种种原因,分页查询sql是在存储过程中拼接出来的,wh ...

  2. WPF 图片灰度处理

    原文:WPF 图片灰度处理 文章的内容是来自微软中文技术论坛的一个帖子,当时是想将一段将图片灰度处理的代码转换为XAML的一个样式,在这里要谢谢 Xiao Yan Qiang.Sheldon _Xia ...

  3. Laravel 5.2 中多用户认证实现(前台和后台登录)

    Laravel 5.2中多用户认证支持,即同时允许不同数据表用户(如前台用户.后台用户.app用户等)登录认证.下面我们就来简单介绍多用户登录及注册功能实现. 1.生成认证脚手架 首先我们使用Lara ...

  4. WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画

    原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...

  5. PostSharp-4.3.33安装包_KeyGen发布

    PostSharp-4.3.33安装包_KeyGen发布 请低调使用. PostSharp安装及注册步骤截图.rar 请把浏览器主页设置为以下地址支持本人.https://www.duba.com/? ...

  6. socket函数集-----网络编程必备值得拥有

    accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #include<sys/types.h> #include<sys/ ...

  7. openFrameworks 是一个旨在助力你进行开创性工作的开源 C++ 工具箱(是很多其它类库的组合)

    openFrameworks 是一个旨在助力你进行开创性工作的开源 C++ 工具箱,提供了简单且直观的实验框架.该工具箱具有常见的工具,并集合了众多常见的库: OpenGL, GLEW, GLUT,  ...

  8. linux清除日志文件

    #!/bin/bash # 清除log文件 LOG_DIR=/var/log ROOT_UID= # $UID为0的时候,用户才具有root用户的权限 LINES= # 默认的保存行数 E_XCD= ...

  9. UWP开发-获取设备唯一ID

    EasClientDeviceInformation deviceInfo = new EasClientDeviceInformation(); this.showDeviceInfo.Items. ...

  10. DIXML(包括所有的W3C XML标准)

    Description:DIXml is an embedded XML, XSLT, and EXSLT processing library for Delphi (Embarcadero / C ...