对象初始化器

public class Person

{

public string username { get; set; }

public int age { get; set; }

public override string ToString()

{

return string.Format("username:{0} age:{1}", this.username, this.age);

}

}

Person p = new Person() {username = "zhuye", age=26};

Console.WriteLine(p.ToString());

编译器会自动为你做setter操作,使得原本几行的属性赋值操作能在一行中完成。这里需要注意:

l         允许只给一部分属性赋值,包括internal访问级别

l         可以结合构造函数一起使用,并且构造函数初始化先于对象初始化器执行

集合初始化器

public class Person

{

public string username { get; set; }

public int age { get; set; }

public override string ToString()

{

return string.Format("username:{0} age:{1}", this.username, this.age);

}

}

var persons = new List<Person> {

new Person {username = "a", age=1},

new Person {username = "b", age=2}};

foreach(var p in persons)

Console.WriteLine(p.ToString());

编译器会自动为你做集合插入操作。如果你为Hashtable初始化的话就相当于使用了两个对象初始化器。

Lambda表达式

var list = new [] { "aa", "bb", "ac" };

var result = Array.FindAll(list, s => (s.IndexOf("a") > -1));

foreach (var v in result)

Console.WriteLine(v);

其实和2.0中的匿名方法差不多,都是用于产生内联方法,只不过Lambda表达式的语法更为简洁。语法如下:

(参数列表) => 表达式或者语句块

其中:

参数个数:可以有多个参数,一个参数,或者无参数。

表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。

前面的示例分别是1个参数的例子,下面结合扩展方法来一个复杂的例子:

public delegate int mydg(int a, int b);

public static class LambdaTest

{

public static int oper(this int a, int b, mydg dg)

{

return dg(a, b);

}

}

Console.WriteLine(1.oper(2, (a, b) => a + b));

Console.WriteLine(2.oper(1, (a, b) => a - b));

查询句法

var persons = new List<Person> {

new Person {username = "a", age=19},

new Person {username = "b", age=20},

new Person {username = "a", age=21},

};

var selectperson = from p in persons where p.age >= 20 select p.username.ToUpper();

foreach(var p in selectperson)

Console.WriteLine(p);

查询句法是使用标准的LINQ查询运算符来表达查询时一个方便的声明式简化写法。

该句法能在代码里表达查询时增进可读性和简洁性,读起来容易,也容易让人写对。

Visual Studio 对查询句法提供了完整的智能感应和编译时检查支持。

编译器在底层把查询句法的表达式翻译成明确的方法调用代码,

代码通过新的扩展方法和Lambda表达式语言特性来实现。上面的查询句法等价于下面的代码:

var selectperson = persons.Where(p=>p.age>=20).Select(p=>p.username.ToUpper());

LINQ查询句法可以实现90%以上T-SQL的功能(由于T-SQL是基于二维表的,

所以LINQ的查询语法会比T-SQL更简单和灵活),但是由于智能感应的原因,select不能放在一开始就输入。

转载于:https://www.cnblogs.com/kevin2013/archive/2010/06/01/1749112.html

Linq to sql(一):预备知识(二)相关推荐

  1. Linq To Sql进阶系列(二)M:M关系

    在Linq To Sql进阶系列(一) 一文中,我们谈到了数据库中的两种基本关系1:M 与1:1. 而现实世界中,还有一种M:M 的关系.比如,一个老师可以有多个学生,而一个学生也可以有多个老师.老师 ...

  2. 闪电网络预备知识二:微支付通道

    微支付通道 首先在介绍微支付之前,说说我对于区块链世界的理解.我们可以这样认为:首先区块链世界是去中心化的,也就是说没有一个中心机构.在现实世界中,中心机构可以作为一种权威,比如银行,你转账通过银行, ...

  3. Linq To Sql进阶系列 -目录导航

    博客园CLR基础研究团队|CLR团队精品系列|C# 3.0专题 [Linq To Sql进阶系列] 目录导航 1 Linq To Sql进阶系列(一)-从映射讲起 本系列,或多或少,直接或间接依赖入门 ...

  4. 手把手教你用好LINQ to SQL(1)

    From: http://developer.51cto.com/art/200904/120915.htm 作者写下这篇文章的主要目的不是"一口吃成个胖子"让大家一次就学会LIN ...

  5. LINQ to SQL之Step by Step及新手问题小结

    前言 最近接连遇到几个朋友问我同一个问题,就是关于.NET平台上ORM框架的选择.我想在这个讲求效率的时代,谁也不想手写SQL或存储过程去访问数据库了.大家都知道,在Java平台上,ORM这一块基本是 ...

  6. Linq To Sql进阶系列(七)动态查询续及CLR与SQL在某些细节上的差别

    在上面一篇文章Linq To Sql进阶系列(六)中,我们提到了使用object的动态查询.本文在上文的基础上,再做更加深入的引申.同时修正上文中一些不妥的地方. 1, object的动态查询续 首先 ...

  7. LINQ快速开发设计最佳实践(二) 构建Model模型

    一.摘要 第一篇文章我简要介绍了项目的设计框架和LINQ实现思想. 本篇文章将是最实际和具有技巧性的地方, 就是如何创建LINQ TO SQL 的模型对象. 二.前言 1.LINQ与LINQ TO S ...

  8. 一步一步学Linq to sql(一):预备知识

    从今天起将推出新手讲堂,首先从linq开始详细讲解.一步一步学Linq to sql(一):预备知识 什么是Linq to sql Linq to sql(或者叫DLINQ)是LINQ(.NET语言集 ...

  9. word2vec 中的数学原理详解(二)预备知识

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/peghoty/article/details/37969635 https://blog.csdn. ...

最新文章

  1. 在html中引入CSS的方法
  2. Wide ResNet ResNeXt DenseNet DPNet [9] NASNet [10] SENet [11] Capsules [12
  3. mipi和isp处理_VS-RK3399 在linux系统下面调试Mipi camera接口介绍
  4. F5 LTM设备降级实战
  5. cmd52命令发送 mmc_Linux SD/MMC/SDIO驱动分析(新)
  6. web.xml中 Log4jConfigListener配置
  7. SpringCloudStream整合rabbitMq
  8. 线程1-线程常用方法
  9. mysql+last_query_cost_辛星简译MySQL中的last_query_cost_MySQL
  10. Spark-Unit1-spark概述与安装部署
  11. iconv字符编码转换
  12. 如何批量删除word文章里的中文只保留英语字母
  13. Vim快捷键(一):文档操作与文本插入
  14. NRF52832 PWM 占空比调整详解
  15. VBS QQ微信消息轰炸
  16. android ViewBinding
  17. WINDOWS10 win+L 锁屏快捷键失效
  18. (四)UPF之常用低功耗单元(Isolation、Level Shifter、Power Switch、State Retention、Always on cell)
  19. DNS的工作过程详解
  20. 某博数据挖掘:使用Scrapy构建自定义数据采集提取洞察信息

热门文章

  1. IDEA启动项目:找不到或无法加载主类
  2. ORACLE SQL SET运算符
  3. STM32开发 -- PMIC、I2C详解
  4. uboot 详细注释讲解
  5. 必须知道的八大种排序算法【java实现】
  6. Android进程间通信(IPC)机制Binder简要介绍和学习计划
  7. Android Hook神器——XPosed入门(登陆劫持演示)
  8. python post请求_python发送http的post请求
  9. java和node.js 2018_2018,Node.js社区最值得关注的三个话题
  10. php管理员登录文件,快速的事情,只有管理员,PHP才能访问文件