ITOO-linq的应用

通过这次ITOO项目,我们对LINQ从陌生到应用到熟悉,也算是浅学了一些。下面总结一下。

简介:

LINQ,语言集成查询(Language Integrated Query)是一组用于C#和VisualBasic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

相关:

1)实现IEnumerable<T>接口的对象.LINQ方法名(lambda表达式)

2)命名空间(.NET Framework):System.Linq;

3)LINQ的关键词:from, select, in, where, group by, orderby

应用:

接下来我们举几个简单的例子来学习一下~

1)where操作

例一:筛选毕业的学生

var GraduatetList=from c in studentList wehre c.IsGraduated=="1" selcet c

例二:筛选数据库表中有效的男学生

Var BoyStudentList=from c in studentList where c.IsEnabled==“1” && c.Sex=="男"

   2)匿名类

匿名类型是C#3.0中新特性。其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。匿名类型还依赖于另外一个特性:支持根据property来创建对象。比如,var d = new { Name = "s" };编译器自动产生一个有property叫做Name的匿名类,然后按这 个类型分配内存,并初始化对象。但是var d = new {"s"};是编译不 通过的。因为,编译器不知道匿名类中的property的名字。例如stringc
= "d";var d = new { c}; 则是可以通过编译的。编译器会创建一个叫 做匿名类带有叫c的property。

var q =
  from c in StudentList
  select new {c.StudentNo, c.Name};

如上这样返回的就只有一个新的只包含学生姓名和学号的实体。有人说这样用Select不就能解决么?那我们再看下一个例子,如果我要想从学生表中查询到学号和姓名 并且我还想从班级表中得到这个学生所在的班级信息。也就是我想要一个有姓名,学号,班级名称的一个匿名类。我们看匿名类的优势就体现出来了。

var studentInfo=from a in studentList.Join(classList, a => a.ClassID, b => b.ClassID, (a, b) => new { Name = a.Name,Sex=a.Sex, ClassName = b.ClassName })

注意:看了这一个语句,相信大家看到了另一个关键字Join。多表查询常用关键词。

       3)Group by

例:我们继续按照上面的例子来看,现在想把查到的学生按班级来分一个组。那我们的LINQ语句应该这样写

var StudentList= (from a in studentList.Join(classList, a => a.ClassID, b => b.ClassID, (a, b) => new { Name = a.Name, Sex = a.Sex,ClassName=b.ClassName })
group a by a.ClassName into g orderby g.Key )

今天的博客连入门都算不上,抛砖引玉,一起讨论和学习LINQ。欢迎指导!

时间: 2024-08-04 01:50:43

ITOO-linq的应用的相关文章

优化ITOO

最近ITOO.NET下的整个平台下的基础.考评和权限已经都出来了,本来想在此评教中能够大展身手,可是却不然,在测试的时候,速度特别的慢,CPU明显高出了很多.问题暴露出来了是件好事,及时想办法改进.下面谈一下自己改进的办法. 1.WEB前端优化 在网上搜索了很多文章,关于WEB前端优化的问题.比如客户端缓存.最小HTTP请求.图片优化加载等等,可是对于评教来说,又有前台是用EasyUi框架,整个界面上并没有太多的图片.下面进行了一些JS上的简单优化.参考文章连接如下:雅虎的工程师团队给出的35个

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

.NET深入解析LINQ框架(一:LINQ优雅的前奏)

阅读目录: 1.LINQ简述 2.LINQ优雅前奏的音符 2.1.隐式类型 (由编辑器自动根据表达式推断出对象的最终类型) 2.2.对象初始化器 (简化了对象的创建及初始化的过程) 2.3.Lambda表达式 (对匿名方法的改进,加入了委托签名的类型推断并很好的与表达式树的结合) 2.4.扩展方法 (允许在不修改类型的内部代码的情况下为类型添加独立的行为) 2.5.匿名类型 (由对象初始化器推断得出的类型,该类型在编译后自动创建) 2.6.表达式目录树(用数据结构表示程序逻辑代码) 3.LINQ

.NET深入解析LINQ框架(二:LINQ优雅的前奏)

阅读目录: 1.LINQ框架的主要设计模型 1.1.链式设计模式 (以流水线般的链接方式设计系统逻辑) 1.2.链式查询方法(逐步加工查询表达式中的每一个工作点) 2.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) 2.3.深入IEnumerable.IEnumerable<T>.Enumerable(LINQ to Object框架的入口) 2.4.深入IQueryable.IQuer

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

阅读目录: 1.开篇介绍 2.扩展Linq to Object (应用框架具有查询功能) 2.1.通过添加IEnumerable<T>对象的扩展方法 2.2.通过继承IEnumerable<T>接口 2.3.详细的对象结构图 3.实现IQueryable<T> .IQueryProvider接口 3.1.延迟加载IEnumertor<T>对象(提高系统性能) 3.2.扩展方法的扩展对象之奥秘(this IQueryable<TSource> so

.NET深入解析LINQ框架(三:LINQ优雅的前奏)

阅读目录: 1.动态LINQ查询(动态构建Expression<T>表达式树) 2.DLR动态语言运行时(基于CLR之上的动态语言运行时) 1].动态LINQ查询(动态构建Expression<T>表达式树) 什么是动态LINQ查询?LINQ的编写是静态的,因为C#是基于静态类型系统原理设计的,在编写时已经确定类型,也就是在编译时就已经知道将要执行什么样的查询,条件是什么.排序方式是什么等等.那么很大一部分应用场合中我们需要根据用户的选择来查询数据源,以往我们都是通过判断的方式来拼

.NET深入解析LINQ框架(六:LINQ执行表达式)

阅读目录: 1.LINQ执行表达式 在看本篇文章之前我假设您已经具备我之前分析的一些原理知识,因为这章所要讲的内容是建立在之前的一系列知识点之上的,为了保证您的阅读顺利建议您先阅读本人的LINQ系列文章的前几篇或者您已经具备比较深入的LINQ原理知识体系,防止耽误您的宝贵时间. 到目前为止我们对LINQ的执行原理已经很清楚了,从它的前期构想到它真正为我们所用都有足够的证据,但是似乎问题并没有我们想的那么简单,问题总是在我们使用中频频出现尤其是新技术的使用,当然有问题才能有进步. 一:LINQ执行

应用开发之Linq和EF

上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知识点.hibernate也是ORM框架.记得hibernate里面有一个叫HQL.先不管HQL的好与坏.主要是明白HQL的目地是什么.ORM的思想就是为了让用户在操作数据的时候用上面向对象的思想来看,而不是二维数据了.所以HQL笔者认为就是一个面向对象思想的SQL语句.那么为什么笔者要讲到HQL呢?事实上笔者

Linq to List

var lstMater = lst.GroupBy(w => new { w.materialId, w.name, w.isPass, w.description }). Select(g => new View_El_MyCourse_MaterialInfo { description = g.Key.description, isPass = g.Key.isPass, materialId = g.Key.materialId, name = g.Key.name }).Order

几种查询方法(lambda Linq Enumerable静态类方式)

1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public class Data { public static List<Student> studentLi