linq是什么呢?
LINQ,语言集成查询(Language Integrated Query),他提供N多查询方法,基本的是select(),where(),orderby()和groupby()这几种,是不是很熟悉,sql中不是也有吗?那么他们有什么区别吗?下面再说.
先从一个简单的实例上理解一下linq是如何使用的.
如实现这个功能:从 numbers 数组中提取偶数并降序排列
以前是这么做的
- int[]numbers = new int[] { 6, 4, 3, 2, 9, 1, 7, 8, 5 };
- List<int>even = new List<int>();
- foreach(int number in numbers)
- {
- if (number % 2 == 0)
- {
- even.Add(number);
- }
- }
- even.Sort();
- even.Reverse();
用linq你就可以这样实现了,简洁了很多
- int[]numbers = new int[] { 6, 4, 3, 2, 9, 1, 7, 8, 5 };
- var even= numbers
- .Where(p => p % 2 == 0)
- .Select(p => p)
- .OrderByDescending(p => p);
上面的那段代码解释就是,第一行就是new一个数组,并赋值。然后对于数组numbers进行where操作,要p%2==0也就是偶数,在这里p就是numbers数组中某一个数,如果是一个对象集合,那么p就是一个对象。select操作p=>p,就是返回整个p,这个是数值看不大出来,如果是对象的话,对象有很多属性,你就可以选择返回某些属性如p=>p.id.最后一句就是根据根据p值倒序排序.
而p=>p,就是lambda表达式.lambda表达式本质上就是一个匿名方法,而且是一个进一步简化的匿名方法,它依附于委托.
它的一般形式:
(输入参数列表)=>{语句序列} 如 x => {return x+1;}
=> :称为Lambda 运算符,读为“goesto”
它的发展过程是在C#1.0中使用的委托,C#2.0中添加了匿名方法,C#3.0中添加了lambda表达式.
C#1.0
首先定义一个委托:
- delegatestring ProcessString( string input );
委托的实例化和使用,
有一个方法LowerIt,用于将输入的值,转为小写.
- privatestring LowerIt(string input)
- {
- return input.ToLower();
- }
实例化委托,此时委托p就是这个LowerIt()方法.委托的实例化就是将委托变量p指向了LowerIt()方法,所以调用p("ABCD")也就是调用LowerIt("ABCD")
- ProcessStringp = new ProcessString( LowerIt );
- Console.WriteLine(p("ABCD"));
在C#2.0中,添加了匿名方法特性
- delegatestring ProcessString( string input );
- // 匿名方法方式,这里就没有上面的LowerIt这个方法名了.
- ProcessStringp = delegate( string input )
- {
- return input.ToLower();
- };
- Console.WriteLine(p("ABCD"));
而在C#3.0中使用简洁的lamdba表达式,上段代码就可以变为这样.
- delegatestring ProcessString( string input );
- // Lambda 表达式方式,p还是用于将input转为小写
- ProcessStringp = input => input.ToLower();
- Console.WriteLine(p("ABCD"));<span style="font-family: Calibri; "> </span>
介绍完一些理论知识,说说我在实际应用时,遇到的问题.
尽管我在使用的时候只使用过select和where,我第一次使用的时候,以为select是选择的意思,然后写var obj = objs.select(p=>p.Code='123') ,我以为他会给我找出所有Code为123的对象给我,后来发现不是这样的,他给我的是一个一堆123.就是说,假如objs有10条数据,Code为123的有3条,我是想查出这三条数据,但是最后查出10条,并且都是123,而且只会返回Code.所以obj其实是string[]类型.obj[0]到obj[9]都是123.所以应该用where操作.
如果把他们写成sql语句的样式,可能我会更容易理解.select code from table1 where p.Code='123'.这条语句只会返回Code一列给我,所以.select(p=>p.Code),只会返回Code一列给我.
写完这篇博客,对于linq和lambda表达式有了一点简单的了解,以后可以多多了解。
相关推荐
在探讨C#编程语言的知识体系时,LINQ(Language Integrated Query)和Lambda表达式是两个非常核心的概念。LINQ提供了一种在C#中进行数据查询的统一方法,无论是对内存中的集合还是对数据库中的数据表。Lambda表达式...
以上对比展示了如何使用SQL语句、LINQ和Lambda表达式来实现常见的数据查询操作。这些不同的技术在.NET框架中被广泛应用,了解它们之间的差异有助于更好地理解和选择合适的工具来处理特定的数据访问任务。
运行这段代码,你会发现两种方法得到的结果完全一致,证明了在.NET 2.0中使用LINQ和Lambda表达式是可行且高效的。 总结来说,尽管.NET 2.0不直接支持LINQ,但通过`System.Core.dll`库中的扩展方法,我们可以模拟...
除了简化委托的使用,Lambda表达式还与C#3.0的另一个重要特性——LINQ(Language Integrated Query)紧密结合。LINQ提供了统一的数据查询方式,无论数据存储在数据库、XML文件还是内存中,都可以使用一致的语法进行...
Lambda表达式通常用在LINQ查询中,用于提供查询表达式式的逻辑部分,如过滤(Where)和投影(Select)条件。 点标记(也被称为方法链语法或方法调用链)是LINQ中使用Lambda表达式的一种特定书写风格,通过一系列...
很有价值的文档学习语法指南。。。 sql语句-linq语言-lambda...可以帮助对SQL、linq、lambda表达式存在疑惑不明白的在这里面可以充分提现出来语法间的对比和学习。让你逐渐对linq、lambda表达式有了解甚至使用。。。
Lambda 表达式是一个包含若干表达式和语句的匿名函数。可以被用作创建委托对象或表达式树类型。所有的 Lambda 表达式都使用操作符“=>”,表示“goes to (转变为)”。操作符左边部分是输入参数表,右边部分是表达式...
Lambda表达式通常用于LINQ(Language Integrated Query)查询,它允许程序员使用类似SQL的语法在内存中的数据集上进行操作。然而,在某些情况下,我们需要将这些表达式转换为实际的SQL语句,以便在数据库中执行。...
lambda 表达式和递归算法 lambda 表达式是一种匿名函数,可以用来定义小的、单次使用的函数。它通常用于数据处理、事件处理和其他需要临时函数的情况。lambda 表达式的基本语法是:`lambda arguments : expression`...
本文将深入探讨LINQ语法、SQL语句以及lambda表达式的对应关系,帮助开发者更好地理解和运用这些概念。 首先,让我们从SQL语句开始。SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。常见...
在.NET框架4.0中,微软引入了一系列的新特性以提升开发效率和代码的可读性,其中最为显著的便是LINQ (Language Integrated Query,语言集成查询) 和Lambda表达式。这两种技术的结合,使得开发者能够更方便、快捷地...
Lambda表达式与委托结合使用,使得代码更加简洁,尤其在LINQ查询中,Lambda表达式提供了强大的功能。 在`DelegateTest`这个Demo中,你可能会看到如何将这些概念结合起来使用。比如,你可能创建了一个类,该类包含一...
总之,C# Lambda表达式提供了一种简洁的方式来定义函数,尤其在处理数据和事件时,Lambda表达式能显著提高代码的可读性和效率。通过熟练掌握Lambda表达式,开发者可以更好地利用C#的强大功能,编写出更加高效、易于...
在C#编程中,Lambda表达式和LINQ是两种强大的工具,它们极大地简化了代码的编写,特别是处理数据查询和事件处理。理解这两者的工作原理和使用方式是成为C#高级程序员的关键步骤。 Lambda表达式是匿名函数的一种简洁...
委托和Lambda表达式是.NET框架中的重要概念,尤其在 LINQ(Language Integrated Query,语言集成查询)中扮演着核心角色。本文将深入探讨这两个概念及其在LINQ中的应用。 首先,我们来理解委托。委托在.NET中是一种...
它可以包含表达式和语句,并且可以用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。 Lambda表达式的组成部分 ------------------------- Lambda表达式由两个部分组成:...
通过阅读《Lambda表达式学习.doc》、《LINQ--Lambda表达式.doc》、《Lambda表达式详细总结.docx》和《Lambda表达式的前世今生.pdf》等文档,可以深入理解Lambda表达式的概念、用法以及在实际项目中的应用,提升编程...
Lambda 表达式是匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式树类型。所有 Lambda 表达式都使用 Lambda 运算符 => ,该运算符读为 “ goes to ”。该 Lambda 运算符的左边是输入参数(如果有),...
在C#中,Lambda表达式主要应用于事件处理、LINQ查询以及表达式树的构建。 Lambda表达式的语法结构如下: `(input parameters) => expression` 或 `(input parameters) => { statement(s); }` 这里的`input ...