linq可以对多种数据源和对象进行查询,如数据库、数据集、XML文档、数组等。

通过对linq的使用,可以减少代码量并优化检索操作。

LINQ关键字

from 指定数据源和范围变量

where 根据布尔表达式(由逻辑与 或 等组成)从数据源中筛选元素

select 指定查询结果中的元素所具有的类型或表现形式

group 对对查询结果按照键值进行分组

into 提供一个标示符,它可以充当对 join group 或 select 子句结果的引用

orderby 对查询出的元素进行排序

join 按照两个指定匹配条件来联接俩个数据源

let 产生一个用于查询表达式中子表达式查询结果的范围变量

下面介绍一个上课时的例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 第六次__1
{
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
// Overrides the Object.ToString() to provide a
// string representation of the object properties.
public override string ToString()
{
return string.Format("{0} {1}\nEmail: {2}",
FirstName, LastName, EmailAddress);
} }
// Create a customer list with sample data public class Tester
{
private static List<Customer> CreateCustomerList()
{
List<Customer> customers = new List<Customer>
{
new Customer { FirstName = "Orlando",LastName = "Gee",
EmailAddress = "orlando0@adventure-works.com"},
new Customer { FirstName = "Keith", LastName = "Harris",
EmailAddress = "keith0@adventure-works.com" },
new Customer { FirstName = "Donna", LastName = "Carreras",
EmailAddress = "donna0@adventure-works.com" },
new Customer { FirstName = "Janet", LastName = "Gates",
EmailAddress = "janet1@adventure-works.com" },
new Customer { FirstName = "Lucy", LastName = "Harrington",
EmailAddress = "lucy0@adventure-works.com" }
};
return customers;
}
static void Main() // Main program
{
List<Customer> customers = CreateCustomerList();
IEnumerable<Customer> result = from customer in customers
where customer.FirstName == "Donna"
select customer;
Console.WriteLine("FirstName == \"Donna\"");
foreach (Customer customer in result)
{ Console.WriteLine(customer.ToString()); }
customers[3].FirstName = "Donna";
Console.WriteLine("FirstName == \"Donna\" (take two)");
foreach (Customer customer in result)
{ Console.WriteLine(customer.ToString()); }
Console.ReadLine();
}
}
}

  程序运行的结果为:

首先我们创建了一个customer类,并在这给类的基础上增加了一些数据(有点想一个小型的数据库),并在主函数中查询

这些类容。

对于主函数:

static void Main()    // Main program
{
List<Customer> customers = CreateCustomerList();
IEnumerable<Customer> result = from customer in customers
where customer.FirstName == "Donna"
select customer;
Console.WriteLine("FirstName == \"Donna\"");
foreach (Customer customer in result)
{ Console.WriteLine(customer.ToString()); }
customers[].FirstName = "Donna";
Console.WriteLine("FirstName == \"Donna\" (take two)");
foreach (Customer customer in result)
{ Console.WriteLine(customer.ToString()); }
Console.ReadLine();
}

首先查询了 customer.FirstName == "Donna" 的内容,并将结果输出。(这些查询语句跟数据库的查询语句差不多,学过数据库的理解起来应该很轻松)。

var这个关键字是用来声明一个隐藏类型的

我们可以用var来声明一个没有类型的变量。(这并不是表明变量没有类型,而是C#会自动识别变量的类型。)

ordering关键字则是用来给数据库中的内容进行排序以进行一些特殊的查找。

如:

orderby customer.LastName, address.Street descending

结果的集合将先以customer.LastName升序排列,再在此基础上以address.Street降序排列。

C# linq的学习及使用的更多相关文章

  1. 扩展方法以及LinQ的学习

    我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用 ...

  2. LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步

    LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨 ...

  3. LinQ实战学习笔记(四) LINQ to Object, 常用查询操作符

    这一篇介绍了下面的内容: 查询object数组 查询强类型数组 查询泛型字典 查询字符串 SelectMany 索引 Distinct操作符 排序 嵌套查询 分组 组连接 内连接 左外连接 交叉连接 ...

  4. LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树

    序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

  5. C# linq语句学习

    using System; using System.Linq; namespace ConsoleApp1 { class Program { static void Main(string[] a ...

  6. LinQ实战学习笔记(二) C#增强特性

    C# 为支持LINQ添加了许多语言特性: 隐式类型局部变量 对象初始化器 Lambda表达式 扩展方法 匿名类型 了解这些新特性是全面了解LINQ的重要先解条件,因此请不要忽视它们. (一)  隐式类 ...

  7. Linq入门学习

    千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看完它!!! 在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之 ...

  8. Linq语法学习

    关键词: select from where in into join on equals orderby descending DefaultIfEmpty() thenby submitChang ...

  9. 常见LINQ语句学习

    1.读取20条最新留言 public ActionResult Index() { var mostRecentEntries = (from entry in _db.Entries orderby ...

随机推荐

  1. ISO14443-4块传输的实现(卡)

    贴上自己的代码,目前测试通过,但我感觉结构不是很好,希望和大家交流共同提高. .H文件 #define ACKN -1 #define ACKY -2 #define RESEND -3 #defin ...

  2. [EXCEL] 在单元格中自动输入时间和日期

    选中需输入的单元格,直接按下“Ctrl+:”组合键可输入当前日期:如果直接按下“Ctrl+Shift+:”组合键即可输入当前时间:当然也可以在单元格中先输入其他文字然后再按以上组合键,如先输入“当前时 ...

  3. 使用MFC开发有十多年了,结合自身的体会,随便说几句(不能样样都依赖别人,C体系的人,绝对不怕人踢馆)

    挺长时间了吧,这个帖子还没沉下去,使用MFC开发有十多年了,结合自身的体会,随便说几句:1.MFC是一个C++的基础类库,封装了绝大多数的API函数,主要是用来创建带UI的应用程序,服务端程序或着不带 ...

  4. 收藏maven错误

    错误原因: 编译下载最新的maven源代码,但是出现错误.错误如下: [WARNING] Some problems were encountered while building the effec ...

  5. COJ 1006 树上操作

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=979 WZJ的数据结构(六) 难度级别:D: 运行时间限制:1000ms: ...

  6. POJ Wormholes 3259

    题目描述: Farmer John 在探索农场的时候 惊奇的发现一些虫洞,虫洞是一个特殊的东西,他是一个单向通道,他能到达虫洞的另一端, 可以穿越到达之前的时间.Farmer John 的由N个农场组 ...

  7. HDU5032 -- Always Cook Mushroom 树状数组 14年北京网络赛

    题意:1000*1000的格子, 坐标为(1, 1) ~ (1000, 1000), 常数 A, B, 点(x,  y)权值为 (x + A) * (y + B), q次询问, 每次询问(0, 0) ...

  8. DataSet、DataTable、DataRow、DataColumn区别及使用实例

    DataSet 表示数据在内存中的缓存. 属性 Tables  获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的 ...

  9. [转] gdb 查看vector, list, map 内容

    转:http://blog.chinaunix.net/uid-13982689-id-34282.html先下载gdb_stl_utils.tar.gz, extract it, and run m ...

  10. 使用一个小图片tile平铺到ImageView中或Activity背景

    方法两种: 首先必须在res/drawable目录下包含一个background.jpg 方法1:在res/drawable中创建一个xml文件(background_repeat.xml) 内容为 ...