.NET Framework 3.5中的LINQ简介

1. LINQ 概览

 1.1. 数据访问现状

 1.2. LINQ 数据访问方式

 1.3. LINQ 项目

2. 访问数组

 2.1. 查询数组

 2.2. 绑定到页面

3. 访问集合

 3.1. 自定义 City 类

public class City
{
public string Name;
public string Country;
public int DistanceFromSeattle;
}
List<City> locations = GetLocations();

 3.2. 查询City 集合

 3.3. 绑定到页面

<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField HeaderText="Country" DataField="Country" />
<asp:BoundField HeaderText="City" DataField="Name" />
<asp:BoundField HeaderText=“Dist” DataField="DistanceFromSeattle“/>
</Columns>
</asp:GridView>

 3.4. 绑定页面结果

4. 查询投影

 4.1. 查询投影(Select)

  ? 不返回所有数据列/属性
  ? 修改或者转化查询返回的数据
  ? 利用编译器对“匿名类型”的支持查询数据列/属性
  ? 生成匿名类型(’a)

 4.2. 使用匿名类型

 4.3. 匿名类型绑定

<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField HeaderText="Country" DataField="Country" />
<asp:BoundField HeaderText="City" DataField=“City" />
<asp:BoundField HeaderText="Dist (KM)" DataField="DistanceInKm" />
</Columns>
</asp:GridView>

 4.4. 匿名类型绑定结果

5. 使用 λ 表达式

 5.1. 使用λ 表达式

 ? 查询语法是一个方便的声明性代码缩写您,可以手动编写它:
 ? IEnumerable expr = names
  .Where(s => s.Length == 5)
  .OrderBy(s => s)
  .Select(s => s.ToUpper());

 5.2. λ 表达式的委托声明
 ? λ 表达式是C# 2 0 匿名方法的自然演化结果

Func filter = delegate (string s) {
return s.Length == 5;
};
Func extract = delegate (string s) {
return s;
};
Func project = delegate (string s) {
return s.ToUpper();
};
IEnumerable expr = names.Where(filter)
.OrderBy(extract)
.Select(project);

 5.3. 表达式树
 . 表达式树是λ 表达式的有效内存中数据表示形式,它使表达式的结构透明且显式。
 . 将λ 表达式指定给Expression 类型的变量、字段或参数,则编译器将发出表达式树。

BinaryExpression body = (BinaryExpression)filter.Body;
ParameterExpression left = (ParameterExpression)body.Left;
ConstantExpression right = (ConstantExpression)body.Right;
Console.WriteLine("{0} {1} {2}", left.Name, body.NodeType,right.Value);

6. 查询操作符

 6.1. 查询操作符Where 的定义

public static class Sequence {
  public static IEnumerable Where(
this IEnumerable source,
Func predicate) {
foreach (T item in source)
if (predicate(item))
yield return item;
}
}

 6.2. 调用
 ? 普通的方式来调用扩展方法:
 ? IEnumerable<string> query =Enumerable.Where(names,s => s.Length < 6);
 ? C#语言允许我们使用如下的方式来调用扩展方法:
 ? IEnumerable<string> query = names.Where(s =>s.Length < 6);

 6.3. 标准查询操作符
 . 排序与分组
  – OrderBy & GroupBy
 . 聚合
  – Count
  – Sum
  – Average
  – Max
  – Min
 . 投影
  – Select & SelectMany

 6.3. 查询语法
 ? C# 的现有 foreach 语句通过 .NET Framework 的IEnumerable/IEnumerator 方法为迭代提供声明
性语法。foreach 语句完全是可选的,但经过证实,它是一个非常方便和常用的语言机制。
 ? 查询语法通过声明性语法为以下最常用的查询操作符简化了查询表达式:Where、Select、
SelectMany、GroupBy、OrderBy、ThenBy、OrderByDescending 和ThenByDescending。

 

时间: 2024-10-14 09:35:16

.NET Framework 3.5中的LINQ简介的相关文章

C# .NET .NET Framework .NET CORE 等的关系简介

2019新的一年,祝大家新年快乐,工作生活一帆风顺,心想事成!诸事大吉! 这篇文章是我今年的第一篇博客,主题是:C#  .NET  .NET Framework   .NET CORE  等这些名词之间有什么关联关系. 费话不多说,直接进入主题. .NET的正式诞生:2002年2月13日微软正式推出.NET的开发工具--Visual Studio.NET 2002. .NET平台结构图: 我们看上图,我们一一来做解释: 硬件设备和操作系统我就不做解释了,这是软件运行的载体或环境,计算机行业的基础

c#中的数据类型简介(枚举)

C#中的数据类型简介(枚举) 枚举的定义 根据MSDN上给出的定义,枚举是一个指定的常数集,其基础类型可以是除Char外的任何整型. 如果没有显式声明基础类型,则使用 Int32. Enum 是 .NET Framework 中所有枚举的基类.其基础类型可以是byte.sbyte.short.ushort.int.unit.long.ulong.默认情况下,第一个枚举数的值为0,然后后续的枚举数依次加1. 枚举的申明 枚举可以申明在命名空间下和类同级别,也可申明在类的内部.申明语法如下: [ac

c#中的数据类型简介(数组)

c#中的数据类型简介(数组) 数组定义 可以将数组看成相同数据类型的一组或多组数据,包括一维数组,多维数组和交错数组 数据申明 一维数组的几种申明和实例化 type[]  typeName = new type[n]:                                                //定义数组但是未赋值 type[0] = item1; type[1] = item2; type[2] = item3; ...... type[n-1] =itemn; type[

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

Oracle中PL/SQL简介、基本语法以及数据类型

Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型,拥有自身的变量申明,赋值语句,而且还有条件,循环等流程控制语句.过程控制结构与SQL数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包. PL/SQL是一种块结构的语言,它将一组语句放在一个块中,一次性的发送给服务器,由服

[Learn AF3] App Framework 3.0中的内置矢量图标

AF3的内置矢量图标 介绍:要使用af3中的图标,必须首先引入icon.css,由于文件中已经内置了字体文件数据,因此不需要引入字体文件支持. <link rel="stylesheet" type="text/css" href="js/af3.0/icons.min.css" /> 使用:引入icon.css文件之后,我们就可以通过给需要显示图标的元素添加css类名来显示图标(实际上就是一个矢量字符),注意需要同时添加icon 和

C++14尝鲜:在C++中实现LINQ

在C++中实现LINQ #include <iostream> #include <vector> template<typename TIterator> struct from_range { typedef typename std::iterator_traits<TIterator>::value_type value_type; TIterator current, upcoming, end; from_range(TIterator begi

在SharePoint中使用LINQ

在SharePoint中使用LINQ LINQ是一种有效且高效的查询数据的方法.使用SPMetal你可以为LINQ准备SharePoint列表.下面讲解如何准备你的列表,并创建使用LINQ的应用程序. 1. 打开命令行(管理员身份运行). 2. 导航到c:\Program Files\Common Files\Microsoft Shared\web server extensions\14\bin,并输入下面命令(确保用你自己的服务器名代替) spmetal.exe /web:http://<

SQL中 decode()函数简介

SQL中 decode()函数简介 今天看别人的SQL时看这里面还有decode()函数,以前从来没接触到,上网查了一下,还挺好用的一个函数,写下来希望对朋友们有帮助哈! decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) From talbename Where … 其中columnname为要选择的table中所定义的