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. decimal类型数据如何保留两位小数

    日常开发中,decimal作为货币类型,经常会处理保留两位小数的问题. 本站整理两种,decimal类型保留两位小数的方法. 第一种: decimal d = 46.28111m;string res ...

  2. Android 数据库读取数据显示 [5]

    2016-12-1 课程内容 昨天学了Android数据库升级.降级.创建 今天把数据库表里面的数据读取出来显示到手机屏幕上 下面代码是MainActivity.java 的代码 package co ...

  3. 【动态规划】XMU 1032 装配线问题

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1032 题目大意: 一个物品在2条生产线上加工,每条线上n(n<=1000)个节点 ...

  4. Silverlight分享一套企业开发主题

    Silverlight分享一套企业开发主题 Silverlight默认主题时间长了,也视觉疲劳了,于是上网上找了下Silverlight主题.发现SL的主题并不多,下面这套JetPack主题还是SL4 ...

  5. C# 实现文件或目录复制到指定目录

    public void CopyFilesToDirKeepSrcDirName(string srcPath, string destDir) { if (Directory.Exists(srcP ...

  6. G - Oil Skimming - hdu 4185(二分图匹配)

    题意:在大海里有一些石油 ‘#’表示石油, ‘.’表示水,有个人有一个工具可以回收这些石油,不过只能回收1*2大小的石油块,里面不能含有海水,要不就没办法使用了,求出来最多能回收多少块石油 分析:先把 ...

  7. KVM几种缓存模式

    原文在这里: http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaat%2Fliaatbpkvmguestca ...

  8. Java中的不可变类

    概念:不可变类的意思是创建该类的实例后,该实例的属性是不可改变的.java中的8个包装类和String类都是不可变类.所以不可变类并不是指该类是被final修饰的,而是指该类的属性是被final修饰的 ...

  9. 转:有关Java泛型的类型擦除(type erasing)

    转载自:拈花微笑 自从Java 5引入泛型之后,Java与C++对于泛型不同的实现的优劣便一直是饭后的谈资.在我之前的很多training中,当讲到Java泛型时总是会和C++的实现比较,一般得出的结 ...

  10. 枚举的基本使用方法 Enumerations

    枚举的基本使用方法 Enumerations Enumeration  enum SomeEnumeration{ case enumeration1 case enumeration2 case   ...