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

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

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

            class Student
{
public string Name { get; set; }
public int Score { get; set; }
}
List<Student> students = new List<Student>{
new Student {Name="Terry", Score=50},
new Student {Name="AI", Score=80},
new Student {Name="AI", Score=70},
};

 

1.简单用法

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

查询学生的姓名:

            var query = from student in students
select student.Name;
foreach (var student in query)
{
Console.WriteLine("{0}", student);
//Terry
//AI
//AI
}

2.匿名类型形式

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

查询学生的姓名:

            var query = from student in students
select new
{
newName = "学生姓名:" + student.Name
};
foreach (var student in query)
{
Console.WriteLine(student.newName);
//学生姓名:Terry
//学生姓名:AI
//学生姓名:AI
}

3.条件形式

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

查询学生的分数等级:

            var query = from student in students
select new
{
student.Name,
level = student.Score < 60 ? "不及格" : "合格"
};
foreach (var student in query)
{
Console.WriteLine("{0}:{1}", student.Name, student.level);
//Terry:不及格
//AI:及格
//AI:及格
}

4.筛选形式

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

查询Terry的分数:

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

5.嵌套类型形式

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

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

           class Student
{
public string Name { get; set; }
public List<int> Scores { get; set; }
}
List<Student> students = new List<Student>{
new Student {Name="Terry", Scores=new List<int> {97, 72, 81, 60}},
new Student {Name="AI", Scores=new List<int> {75, 84, 91, 39}},
new Student {Name="Wade", Scores=new List<int> {88, 94, 65, 85}},
new Student {Name="Tracy", Scores=new List<int>{97, 89, 85, 82}},
new Student {Name="Kobe", Scores=new List<int> {35, 72, 91, 70}}
};
var query = from student in students
select new
{
student.Name,
//生成新的集合对象
highScore=from sc in student.Scores
where sc>80
select sc
};
foreach (var student in query)
{
Console.Write("{0}:",student.Name);
foreach (var scores in student.highScore)
{
Console.Write("{0},",scores);
}
Console.WriteLine();
//Terry:97,81,
//AI:84,91,
//Wade:88,94,85,
//Tracy:97,89,85,82,
//Kobe:91,
}

6.本地方法调用形式

说明:调用自定义方法。

            var query = from student in students
select new
{
student.Name,
//调用GetLevel方法
level = GetLevel(student.Score)
};
foreach (var student in query)
{
Console.WriteLine("{0}:{1}", student.Name, student.level);
//Terry:不及格
//AI:及格
//AI:及格
} protected static string GetLevel(int score)
{
if (score > 60)
{
return "及格";
}
else
{
return "不及格";
}
}

7.Distinct形式

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

查询不重复的学生姓名:

            var query = (from student in students
select student.Name).Distinct();
foreach (var student in query)
{
Console.WriteLine("{0}", student);
//Terry:
//AI
}

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. 第六章-Javac符号表

    需要参考: (1)Architecture of a Java Compiler (2)关于符号Symbol第一篇 (3)关于符号Symbol第二篇 (4)关于类型Type (5)关于作用域范围Sco ...

  2. mysql建立索引的一些小规则

    1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: ...

  3. GitHub多人协作简明教程

    本文面向已经了解/熟悉git基本命令但是并不熟悉如何使用GitHub进行多人协作开发项目的同学. 为了简单起见,这里假设只有两个开发人员,HuanianLi 和 DaxiangLi.他们在GitHub ...

  4. DataSet 多表关系

    protected void Page_Load(object sender, EventArgs e) { string connectionString = @"Data Source= ...

  5. “网红架构师”解决你的Ceph 运维难题

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由Tstack发表于云+社区专栏 本文为长篇连续剧,将分多个篇幅发表,主要介绍了从动手部署环境到后期运营故障处理过程中常见的问题,内容由 ...

  6. GCC 多文件编辑

    #include <stdio.h> int plus(int a, int b); int minus(int a, int b); int multiply(int a, int b) ...

  7. 让 markdown 生成带目录的 html 文件

    安装 npm install -g i5ting_toc 用法 进入 markdown 文件所在的文件夹 举个栗子: 你的sample.md文件放在桌面上 cd /Users/dora/Desktop ...

  8. Struts2开发基础

    Struts2开发基础 struts2采用拦截器的机制来处理用户的请求,使得业务逻辑控制器能够与ServletAPI完全脱离开. 1. Hello World! 配置web.xml <?xml ...

  9. token是什么

    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西. 一.我们先解释一下他的含义: 1 ...

  10. Java 获取系统时间

    1. Date类 Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss&q ...