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 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...
随机推荐
- 【转】sql 一对多情况下 Group by分组 结果多列合并
部分原始表数据 需求: 按routineId进行group分组 初步想法(错误): select r * from autowork.dbo.PartOnRoutine where routineId ...
- WINDOWS系统注册表(读、写)
读取注册表 写入注册表
- P1726 上白泽慧音(0分)
题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...
- 关于C语言中EOF的一点认识
总结来说:EOF(即End Of File)是一个文件结束的标记,当文件被读取到EOF位置时,参与读取的函数会返回整型值 -1,这时要注意的是:这个值被赋值给有符号char类型时是0xff,被赋值给有 ...
- Unity局部坐标系与世界坐标系的区别
局部坐标旋转是指以父物体为参考,进行旋转. 而世界坐标系以"坐标陀螺"来进行旋转. 类似的情况例如: 东.南.西.北.是世界坐标系. 前.后.左.右是局部坐标系
- LeetCode Golang 2. 两数相加
2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
- Pyhton学习——Day31
# 服务端和接收端的send和reve没有任何关系,只与协议之间有关系# 应用程序产生的数据一定会交给操作系统,并由操作系统往外发送# 发送端什么时候会清空自己的内存?# 收到接收端的ACK响应以后才 ...
- java的插入排序
import java.util.Scanner;public class test22 { public static void main(String[] args) { Scanner in= ...
- oracle11.2静默安装
操作系统及Oracle版本 Linux版本:rhel-server-5.8-x86_64-dvd Oracle版本:Oracle Database 11g Release 2 (11.2.0.4.0) ...
- 基于bootstrap的分页组件-Bootstrap Paginator
效果