转载于:http://www.cnblogs.com/ForEvErNoME/archive/2012/07/25/2606659.html

说明:在查询表达式中,select 子句可以指定将在执行查询时产生的值的类型。 该子句的结果将基于前面所有子句的计算结果以及 select 子句本身中的所有表达式。 查询表达式必须以 select 子句或 group 子句结束。

Select操作包括7种形式,分别为简单用法、匿名类型形式、条件形式、筛选形式、嵌套类型形式、本地方法调用形式、Distinct形式。下面分别用实例举例下:

  1. class Student
  2. {
  3. public string Name { get; set; }
  4. public int Score { get; set; }
  5. }
  6. List<Student> students = new List<Student>{
  7. new Student {Name="Terry", Score=50},
  8. new Student {Name="AI", Score=80},
  9. new Student {Name="AI", Score=70},
  10. };

 

1.简单用法

说明:当以select结尾时表示的只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的时候,它才会执行这个语句,这就是延迟加载(deferred loading)。

查询学生的姓名:

  1. var query = from student in students
  2. select student.Name;
  3. foreach (var student in query)
  4. {
  5. Console.WriteLine("{0}", student);
  6. //Terry
  7. //AI
  8. //AI
  9. }

2.匿名类型形式

说明:其实质是编译器根据我们自定义产生一个匿名的类来帮助我们实现临时变量的储存。例如 var ob = new {Name = "Harry"},编译器自动产生一个有property叫做Name的匿名类,然后按这个类型分配内存,并初始化对象。

查询学生的姓名:

  1. var query = from student in students
  2. select new
  3. {
  4. newName = "学生姓名:" + student.Name
  5. };
  6. foreach (var student in query)
  7. {
  8. Console.WriteLine(student.newName);
  9. //学生姓名:Terry
  10. //学生姓名:AI
  11. //学生姓名:AI
  12. }

3.条件形式

说明:三元运算,类似于SQL语句case when condition then else的用法。

查询学生的分数等级:

  1. var query = from student in students
  2. select new
  3. {
  4. student.Name,
  5. level = student.Score < 60 ? "不及格" : "合格"
  6. };
  7. foreach (var student in query)
  8. {
  9. Console.WriteLine("{0}:{1}", student.Name, student.level);
  10. //Terry:不及格
  11. //AI:及格
  12. //AI:及格
  13. }

4.筛选形式

说明:结合where用起到过滤的作用。

查询Terry的分数:

  1. var query = from student in students
  2. where student.Name == "Terry"
  3. select student;
  4. foreach (var student in query)
  5. {
  6. Console.WriteLine("{0}:{1}",student.Name,student.Score);
  7. //Terry:50
  8. }

5.嵌套类型形式

说明:如果一个数据源里面又包含了一个或多个集合列表,那么应该使用复合的select子句来进行查询。

查询大于80分的学生分数:

  1. class Student
  2. {
  3. public string Name { get; set; }
  4. public List<int> Scores { get; set; }
  5. }
  6. List<Student> students = new List<Student>{
  7. new Student {Name="Terry", Scores=new List<int> {97, 72, 81, 60}},
  8. new Student {Name="AI", Scores=new List<int> {75, 84, 91, 39}},
  9. new Student {Name="Wade", Scores=new List<int> {88, 94, 65, 85}},
  10. new Student {Name="Tracy", Scores=new List<int>{97, 89, 85, 82}},
  11. new Student {Name="Kobe", Scores=new List<int> {35, 72, 91, 70}}
  12. };
  13. var query = from student in students
  14. select new
  15. {
  16. student.Name,
  17. //生成新的集合对象
  18. highScore=from sc in student.Scores
  19. where sc>80
  20. select sc
  21. };
  22. foreach (var student in query)
  23. {
  24. Console.Write("{0}:",student.Name);
  25. foreach (var scores in student.highScore)
  26. {
  27. Console.Write("{0},",scores);
  28. }
  29. Console.WriteLine();
  30. //Terry:97,81,
  31. //AI:84,91,
  32. //Wade:88,94,85,
  33. //Tracy:97,89,85,82,
  34. //Kobe:91,
  35. }

6.本地方法调用形式

说明:调用自定义方法。

  1. var query = from student in students
  2. select new
  3. {
  4. student.Name,
  5. //调用GetLevel方法
  6. level = GetLevel(student.Score)
  7. };
  8. foreach (var student in query)
  9. {
  10. Console.WriteLine("{0}:{1}", student.Name, student.level);
  11. //Terry:不及格
  12. //AI:及格
  13. //AI:及格
  14. }
  15.  
  16. protected static string GetLevel(int score)
  17. {
  18. if (score > 60)
  19. {
  20. return "及格";
  21. }
  22. else
  23. {
  24. return "不及格";
  25. }
  26. }

7.Distinct形式

说明:用于查询不重复的结果集。类似于SQL语句SELECT DISTINCT 。

查询不重复的学生姓名:

  1. var query = (from student in students
  2. select student.Name).Distinct();
  3. foreach (var student in query)
  4. {
  5. Console.WriteLine("{0}", student);
  6. //Terry:
  7. //AI
  8. }

LINQ学习:Select的用法的更多相关文章

  1. Linq学习以及简单用法

    Linq学习 Linq(language Intergrated Query)即语言集成查询 LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询.用于保存和检索来自不同数据源的数据, ...

  2. Linq学习(三)-基本查询

    一.本将主要介绍内容 从linq,sql,lambda三个角度比较来学习 select.orderby.分页.group by.distinct.子查询.in的用法 1.select 查询用户和它们的 ...

  3. LinQ To Object 基本用法

    http://www.cnblogs.com/terryzh/archive/2012/11/10/2763538.html LinQ To Object 基本用法 inq的基本语法:var resu ...

  4. (转)Linq学习笔记

    写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...

  5. C#之Linq学习笔记【转】

    写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...

  6. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

  7. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

  8. C# LINQ学习笔记

    LINQ,语言集成查询: LINQ TO SQL,同EF,NHibernate一样,也是一种ORM框架: 1. 入门应用示例: static public void LinqBasic() { var ...

  9. Linq学习工具及Lamada表达式

    好东西.转载一个.以备学习 Linq学习工具:     http://www.linqpad.net/ Lamada表达式: Func<int, int, int> IntPow = (x ...

  10. linq学习

    最全的linq学习文章: http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html

随机推荐

  1. js 键盘事件

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...

  2. JavaScript -- Window-Focus

    -----034-Window-Focus.html----- <!DOCTYPE html> <html> <head> <meta http-equiv= ...

  3. 详解Java中的final关键字

    本文原文地址:https://jiang-hao.com/articles/2019/coding-java-final-keyword.html1 final 简介2 final关键字可用于多个场景 ...

  4. 第七章 过滤器 Filter(二)

    一  过滤器API 由容器实现的接口 –javax.servlet.Filter –javax.servlet.FilterChain –javax.servlet.FilterConfig 四个包装 ...

  5. java为什么使用TypeReference

    用途 在使用fastJson时,对于泛型的反序列化很多场景下都会使用到TypeReference,例如: void testTypeReference() { List<Integer> ...

  6. Java @Repeatable

    查看@PropertySource注解时候,发现了@Repeatable,从来没见过的注解,学习了下: 首先介绍下@Repeatable注解: JDK1.8出现的,作用是解决一个类上不能标注重复的注解 ...

  7. 使用whiptail开发linux环境交互式对话框

    #!/bin/bash oem=$(/bin/cat /opt/jdwa/etc/oem) systype=$(/bin/cat /opt/jdwa/etc/systype) export selec ...

  8. 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)

    目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...

  9. 初入Java后端之Servlet

    初入Java后端之Servlet 后端 Servlet  什么是Servlet? Servlet实际上是一个按照Servlet规范写的Java类.是运行在Web服务端的Java应用程序.与Java程序 ...

  10. laravel 标签

    变量标签 {$名} 数组变量标签 {{$名[key]}} 变量调节器 在标签中直接使用php函数,写法和php中一样 条件标签 @if(条件) @endif @if(条件) @else @endif ...