[读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析

前端之家收集整理的这篇文章主要介绍了[读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<p style="background: gray; color: #ffffff; font-size: 18pt;">前言

截取?

百度到了一个叫做Lambda的东西,所以用了之后效果如下:

Main( [] s = []{ ,,,,,, result = n s n < [] b = ( i = ; i < b.Length; i++ }

splitTexts = cmbValidationText.Split( (cmbValidation.Items != && cmbValidation.Items.Count > ( splitText valid = cmbValidation.Items.Any(item => (item != ) && (item.Enabled) &&             ( (! invalidText += splitText.ToString() + isInvalidTextExist = categoryAndCapabilities = capabilities.Select(item => PRResponseCategory category = PRCapability prCapability = (prCapability != category = { Category = category,PRCapability = prCapability,Capability = .Where(item => (item != && item.Category != && item.PRCapability != .OrderBy(item => .ThenBy(item => item.PRCapability.AllowNumeric.GetValueOrDefault() ? : .ThenBy(item => .GroupBy(item => .ToDictionary(grouping => grouping.Key,grouping => grouping.ToList());

查询"的意思. 它主要包含4个组件: Linq to Object,Linq to XML,Linq to DataSet 和Linq to sql.内容可以查看一个国外网站: http://www.dotnetperls.com/linq

查询表达式

查询表达式是一种使用查询语法表示的表达式,它用于查询和转换来自任意支持LINQ的数据源中的数据。查询表达式使用许多常见的C#语言构造,易读简洁,容易掌握。它由一组类似于sql或XQuery的声明性语法编写的子句组成。每一个子句可以包含一个或多个C#表达式。这些C#表达式本身也可能是查询表达式或包含查询表达式。

查询表达式必须以from子句开头,以select或group子句结束。第一个from子句和最后一个select子句或group子句之间,可以包含一个活多个where子句、let子句、join子 句、orderby子句和group子句,甚至还可以是from子句。它包括8个基本子句,具体说明如下所示。查询操作的数据源和范围变量。查询结果的类型和表现形式。查询表达式中的字表达式结果的范围变量。查询结果进行排序操作,包括升序和降序。查询结果进行分组。查询操作中的中坚结果。查询操作的数据源。

查询表达式query,该查询表达式查询arr数组中的每一个元素。

查询表达式query2.该查询表达式查询arr数组中大于6的元素。

查询操作,而不是查询的结果。当查询表达式执行查询操作时,才会计算该查询表达式的结果。以上两个变量的类型都属于集合类型。

查询表达式query。该查询表达式包含两个from子句,他们分别查询两个独立的数据源;arr1数组和arr2数组。最后,使用select子句计算当前元素的和。

查询表达式查询表达式中,有可能查询表达式的数据源中的每一个元素本身也作为该查询表达式的数据源。那么要查询数据源中的每一个元素中的元素,则需要使用符合from子句。符合from子句类似于嵌套的foreach语句。

查询表达式query。该查询表达式从arr数组中查询为偶数的元素。

查询结果按升序或者降序排序。升序由关键字ascending指定,而降序由关键字descending指定。

查询表达式query。该查询表达式从arr数组中查询大于1且小于6的元素,并且按照n元素对查询结果进行降序排序。

查询结果分组,并返回一对象序列。这些对象包含零个或更多个与改组的key值匹配的项,还可以使用group子句结束查询表达式。

查询表达式query。该查询表达式从arr数组中查询大于1且小于6的元素,并且按照n%2表达式的值对查询结果进行分组。

查询表达式的结果是一个序列(类型为IEnumerable>),该序列的元素类型为IGrouping.其实,该查询结果中的元素也是一个序列。

1.5,into子句 查询表达式query。该查询表达式从arr数组中查询大于1且小于6的元素,并且按照n%2表达式的值对查询结果进行分组。该查询表达式的具体说明如下所示:1 && n<6:指定筛选大于1且小于6的元素。查询结果进行分组(0和0一组,1和1 一组),并使用into子句创建临时标识符g。该临时标识符临时保存分组结果。查询sn元素。查询sn元素。

查询表达式的查询结果包括4个元素,依次为2、4、3和5

支持以下3种常见联接方式。链接关系 必须同时满足两个数据源,类似于sql语句中的inner join子句。链接关系必须满足联接中的左数据源,类似于sql语句中的left join子句。

查询表达式query。该查询表达式使用join子句联接了arra和arrb数组,具体说明如下。查询。

查询表达式首先选择小于7的元素,(包括0~6),然后再喝arrb数组进行联接,并获取既包含在{0,6}集合中,又包含在arrb数组中的元素。最终,查询表达式的结果包含4个元素(0、2、4和6)链接。它将左数据源与右数据源的元素一次匹配。左数据源的所有元素都出现在查询结果中。若在右数据源中找到匹配项,则使用匹配的数据,否则用空表示。

查询XML文件查询XML文件,但是用XPath时必须首先知道XML文件的具体结构,而使用Linq to XML则不需要知道这些.代码还更加简洁.

方法,它可以包含表达式和语句,并且用于创建委托或转换表达式树."运算符(读作goes to),该运算符的左边是匿名方法的输入参数,右边则是表达式或语句块.

LINQ的书写格式如下:  数据库对象  查询的值  

表达式或者语句块

函数的实现部分(函数体)。 查询全部

查询Student表的所有记录。

查询全部:

查询Student表中的所有记录的Sname、Ssex和Class列。

查询教师所有的单位即不重复的Depart列。

查询 between and

查询score表中成绩在60到80之间的所有记录。

查询Student表中"95031"班或性别为"女"的同学记录。

查询Student表的所有记录。

查询

查询'3-105'号课程的平均分。

查询查询score表中的最高分的学生学号和课程号。

查询score表中至少有5名学生选修的并以3开头的课程的平均分数。

查询score表中至少有5名学生选修的并以3开头的课程的平均分数。

14,关联多条件查询

感谢@浪子哥 给的建议,现在加上两张表的关联多条件查询,只有Linq和Lambda表达式

今天自己又参考园里大神的一些帖子自己写了一个两张表关联查询的Linq及Lambda表达式的Demo,大家可以看下.

DataTable tableA = tableA.Columns.Add(,( tableA.Columns.Add(,( tableA.Columns.Add(score,( DataTable tableB = tableB.Columns.Add(,( tableB.Columns.Add(,( tableB.Columns.Add(score,( tableA.Rows.Add(,, tableA.Rows.Add(,, tableA.Rows.Add(,, tableA.Rows.Add(,, tableB.Rows.Add(, tableB.Rows.Add(,, tableB.Rows.Add(, tableB.Rows.Add(,, 查询 singleQuery = tableA.AsEnumerable().Where(stu => stu.Field<>() > ( item Console.WriteLine(,item.Field<>(),              item.Field<>( 查询 doubleQuery = a b a.Field<>() == b.Field<>() && a.Field<>() != b.Field<>( a.Field<>(),a.Field<>(score Name = a.Field<>( A_Age = a.Field<>( B_Age = b.Field<>( ( item Console.WriteLine( 查询 query = a => a.Field<>( b => b.Field<>( (a,b) => a = b = .Where(c => (c.a.Field<>() != c.b.Field<>( .OrderBy(d => d.a.Field<>( .ThenBy(e => e.a.Field<>(score .Select(f => Name = f.a.Field<>( A_Age = f.a.Field<>( B_Age = f.b.Field<>( A_score = f.a.Field<>(score B_score = f.a.Field<>(score ( item Console.WriteLine(score {3},              tableB_score {4}score,item.B_score);
        }

解析:

  首先可以看出来,Lambda表达式对于这种多表多条件的查询写法的易读性明显没有Linq高,所以 还是建议用Linq去写. 运行结果如下图:

猜你在找的C#相关文章