C# Lambda && Linq
- Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作”goes to”,=>左侧是变量,右侧是表达式,变量类型可以自动推导
- Linq查询操作由三个不同操作组成:示例代码:
- 获取数据源,数据源可以使Xml,SQL数据库,Ado.net数据集,.Net集合中的数据等
- 创建查询,但并没有执行查询,只是用一个变量存储查询,查询表达式包含三个字句:执行查询:使用foreach语句循环访问查询变量时才会真正执行查询,使用Count,Max,Average,First也会立即执行查询,这些语句会隐式调用foreach
- from:指定数据源
- where:指定filter
- select:指定返回数据
[TestClass]
public class XmlLinqTest
{
private static XElement doc; [ClassInitialize]
public static void Initialize(TestContext context)
{
doc = XElement.Load("Books.xml");
} [TestMethod]
public void QueryBook_Id_ReturnBook()
{ IEnumerable<XElement> books=from el in doc.Elements()
where el.Attribute("id").Value.Equals("1")
select el;
XElement book = books.First();
Assert.AreEqual(book.Attribute("id").Value, "1");
Assert.AreEqual(book.Attribute("name").Value,"Linq");
Assert.AreEqual(book.Attribute("author").Value,"Tom"); }
}<?xml version="1.0" encoding="utf-8" ?>
<Books>
<Book id="1" name="Linq" author="Tom" />
<Book id="2" name="Lambda" author="Jerry" />
</Books>- 查询关键字:查询语法在编译时被转换为方法调用,这些方法被称为standard query operators,包括Where,Select,GroupBy,Join,Max,Average等(都是扩展方法),可以直接调用这些方法替代查询语法
- orderby:对返回的数据进行排序
- group:按指定的键对结果进行分组,如果要对分组的结果进行操作可以使用into创建一个可以使用的查询符
- 示例代码:
// custQuery 的类型是IEnumerable<IGrouping<string, Customer>>
// IGrouping是group.. by语句的返回类型
var custQuery =
from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup; - join:联接,join字句接受两个数据源作为输入,只能执行等联接,也就是只能基于两个键之间的相等关系进行匹配,分为如下几种:
- inner join:
- group join:含有into字句,将会产生一个分组序列,该序列将左侧数据源中的元素与右侧数据源中的一个或多个元素相关联,如果右侧没有与左侧元素匹配的元素,则会产生一个空的集合
- left outer join:在group join中使用DefaultEmpty方法,用于指定没有匹配时,左侧元素对应的元素,这样左侧数据源中的每个元素都会有对应的集合
- 示例代码:
<?xml version="1.0" encoding="utf-8" ?>
<Authors>
<Author id="1" name="Tom" />
<Author id="2" name="Jerry"/>
<Author id="3" name="Jack"/>
</Authors> <?xml version="1.0" encoding="utf-8" ?>
<Books>
<Book id="1" name="Linq" authorId="1" />
<Book id="2" name="Lambda" authorId="2" />
<Book id="3" name="C#" authorId="1" />
</Books>//BooksGroup是Books xml中满足条件的element的集合var group = from author in authors.Elements()
join book in books.Elements() on author.Attribute("id").Value
equals book.Attribute("authorId").Value into BooksGroup
where author.Attribute("id").Value.Equals("1")
select new { Author = author.Attribute("name").Value, authorBooks = BooksGroup };
- select:生成查询结果
- let:使用新的变量存储子表达式的结果,可供后面语句继续使用
int[] numbers = { 5, 10, 8, 3, 6, 12}; //Query syntax:
IEnumerable<int> numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num; //Method syntax:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);- https://blogs.msdn.microsoft.com/wesdyer/2008/01/10/the-marvels-of-monads/
C# Lambda && Linq的更多相关文章
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...
- 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)
话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法 (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...
- [转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
本文转自:https://blog.csdn.net/dingxiaowei2013/article/details/29405687 继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下 ...
- 几种查询方法(lambda Linq Enumerable静态类方式)
1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...
- 有关 Lambda && linq练习 有待整理
1. 查询Student表中的所有记录的Sname.Ssex和Class列.(select sname,ssex,class from student) Students.Select(s=> ...
- ASP.NET MVC4+EF5(Lambda/Linq)读取数据
希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高 ...
- Lambda&Linq
var list = new List<Model> { , UserName = ", Email = "zhang3@yoy.com"}, , UserN ...
- Lambda表达式动态拼接(备忘)
EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句 分类: C# Lambda/Linq Entity Framework 2013-05-24 06:58 ...
- [c#菜鸟]lambda表达式
what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...
随机推荐
- 在Android源码下编译jni所需要知道的事~
以下只是自己的一些总结,欢迎讨论 通过NDK编译jni网上有很多例子,在这我只总结在Android源码下编译 1.android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK ...
- IOS入门之创建视图和控件绑定
学习IOS几天了,跟着教程做了两个小应用了,现在先来总结一下.今天就是创建视图和绑带到代码了.其实就是常见的MVC模式实现. 使用的Xcode版本是8.2. 在Xcode创建项目之后,默认就会创建一个 ...
- Eclipse中执行Ant脚本出现Could not find the main class的问题及解
试过了:https://blog.csdn.net/bookroader/article/details/2300337 但是不管用,偶然看到这篇没有直接关系的 https://blog.csdn.n ...
- Unity碰撞和触发的区别
碰撞的必要条件: 2个都有Collider,且至少有一个刚体.带刚体的身上会检测OnCollision事件,stay就是2个一直在碰着. 触发的必要条件: 至少有一个碰撞器勾选了IsTrigger,至 ...
- 3DSMAX制作逼真的欧式沙发建模教程
这篇教程是朋友们介绍利用3DSMAX制作逼真的欧式沙发建模,教程制作出来的效果真心很不错,通过这篇教程,大家可以学习沙发建模的制作方法和思路,推荐过来,一起来学习吧! 3DSMAX软件下载:http: ...
- 什么是2.5D与3D编辑模式
ZBrush®其实就是一个带有三维特性的二维软件,它不仅具有绘制二维图像的功能,而且也具有对三维物体进行编辑的功能,就是所谓的2.5D(Pixol技术). 学习ZBrush之前有必要了解一下2.5D的 ...
- jq点击按钮打开和关闭弹出层,点击除了当前按钮以外的地方关闭弹出层
1.html <a id="more" onclick="moreFun()">更多</a> <ul id="moreL ...
- oracle中单引号的处理
当想让输出的结果中字段带有单引号', 场景一:连续三个单引号''' select '''helin''' from dual; ---'helin' 场景二:拼接字段的结果集--连续4个单引号 sel ...
- is == id 的用法;代码块;深浅copy;集合
1 内容总览 is == id 用法 代码块 同一代码块下的缓存机制 (字符串驻留机制) 不同代码块下的缓存机制 (小数据池) 总结 集合(了解) 深浅copy 2 具体内容 id is == # i ...
- JavaScript学习笔记(第二天)
数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String.我们想存储班级中所有学生的姓名,此时该如何存储? 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按 ...