这一篇文章主要总结LINQ to sql的简单查询(单表查询)和联接查询(多表查询)

单表查询

需求是我们要输出TClass表中的结果。使用了from…in…select语句,代码如下:

public static void SimpleQuery()
{
using (L2SDBDataContext db = new L2SDBDataContext())
{
var query = from tc in db.TClasses
//select tc;
select new {
ClassID=tc.ClassID,
ClassName=tc.ClassName
};
Console.WriteLine("output results for table of class");
int i = 1;
foreach (var item in query)
{
Console.WriteLine("{0},ClassID:{1},ClassName:{2}",i,item.ClassID,item.ClassName);
i++;
}
}
}

注意:这里没有用select tc,而是定义了一个新的匿名类型是因为性能的考虑,后面性能优化的部分会讲到。

输出结果:

多表查询

多表查询,也可以称为联接查询,需要通过外键联接多张表才能查询到我们想要的结果,现在的需求是某个班级及这个班级相关学生的信息。实现这个需求有两种方法,一种是内联接,另一种方法是外联接,下面是通过内联接查询的代码。

public static void Query_InnerJoin()
{
using (L2SDBDataContext db = new L2SDBDataContext())
{
var query = from s in db.TStudents
join c in db.TClasses on s.ClassID equals c.ClassID
where s.ClassID == 3
select new
{
ClassID = s.ClassID,
ClassName = c.ClassName,
Student = new
{
Name = s.Name,
StudentID = s.StudentID
}
}; foreach (var item in query)
{
Console.WriteLine("{0} {1} {2}", item.ClassID, item.ClassName, item.Student.Name);
}
}
}

运行结果:

外联接代码:

public static void Query_OutJoin()
{
using (L2SDBDataContext db = new L2SDBDataContext())
{
var query = from s in db.TStudents
join c in db.TClasses on s.ClassID equals c.ClassID into gc
from gci in gc.DefaultIfEmpty()
where s.ClassID == 3
select new
{
ClassID = s.ClassID,
ClassName = gci.ClassName,
Student = new
{
Name = s.Name,
StudentID = s.StudentID
}
}; foreach (var item in query)
{
Console.WriteLine("{0}, {1} [{2}]", item.ClassID, item.ClassName, item.Student.Name);
}
}
}

注意:outer join时必须将join后的表into到一个新的变量中,然后调用这个对象的DefaultIfEmpty方法。

运行结果与内联接相同。

LINQ to Sql系列二 简单查询和联接查询的更多相关文章

  1. Influx Sql系列教程九:query数据查询基本篇二

    前面一篇介绍了influxdb中基本的查询操作,在结尾处提到了如果我们希望对查询的结果进行分组,排序,分页时,应该怎么操作,接下来我们看一下上面几个场景的支持 在开始本文之前,建议先阅读上篇博文: 1 ...

  2. (转载)一步一步学Linq to sql系列文章

    现在Linq to sql的资料还不是很多,本人水平有限,如果有错或者误导请指出,谢谢. 一步一步学Linq to sql(一):预备知识 一步一步学Linq to sql(二):DataContex ...

  3. Linq to Sql:N层应用中的查询(上) : 返回自定义实体

    原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...

  4. Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询

    原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...

  5. LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

    http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...

  6. LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据 (转)

    http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...

  7. Influx Sql系列教程八:query数据查询基本篇

    前面几篇介绍了InfluxDB的添加,删除修改数据,接下来进入查询篇,掌握一定的SQL知识对于理解本篇博文有更好的帮助,下面在介绍查询的基础操作的同时,也会给出InfluxSql与SQL之间的一些差别 ...

  8. LINQ to SQL系列四 使用inner join,outer join

    先看一个最简单的inner join,在读取Student表时inner join Class表取的对应的Class信息: static void Main(string[] args) { usin ...

  9. LINQ基础 之 LINQ TO SQL (二)

    配置LINQ TO SQL 首先添加一个Linq to sql文件,以.dbml结尾的文件.无法把表拖拽到.dbml文件中,提示“所选对象使用不支持的数据提供程序” 解决方案 在服务器资源管理器中右键 ...

随机推荐

  1. LoadRunner 录制cas 登陆脚本

    关于CAS 的概念,见链接:http://www.360doc.com/content/15/0204/17/21706453_446251626.shtml 需要增加4个关联函数 //Correla ...

  2. Android JNI入门第六篇——C调用Java

    本篇将介绍在JNI编程中C调用Java实现. 源码下载地址:http://download.csdn.net/detail/xyz_lmn/4868265 关键代码: java: public cla ...

  3. 转 mybatis javaType与jdbcType对应

    java.sql.Types 值 Java 类型 IBM DB2 Oracle Sybase SQL Informix IBM Content Manager   BIGINT java.lang.l ...

  4. js 如何动态添加数组_百度知道

    1.数组的创建var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...

  5. CentOS 6.4 x64 zabbix 2.2.2 编译安装

    A. 服务端安装配置 1.下载zabbix 2.x 最新版本 http://www.zabbix.com/download.php 2.安装配置所需要软件(zabbix需要一个lamp环境) 使用 y ...

  6. Linux系统开机启动流程

    (来源学习Linux时,自己做的笔记) Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限, ...

  7. Sping--IOC概念

    1. 新建项目, 引入spring包(sping, common-annotation, common-logging包), 还有junit包. user.java: package com.bjsx ...

  8. CI框架学习——检查用户名与密码是否合法(二)

    检查用户名与密码是否合法 步骤一.编写用户登录的窗体见下面内容 步骤二.编写数据库校验方法 $username = $_POST["username"];            # ...

  9. CI分页器pagination的原理及实现

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 下面这段代码是从官网上翻译过来的,介绍了分页的用例 1 2 3 4 5 6 ...

  10. FZU 1064 教授的测试

    递归构造答案. 根据当前整颗树的编号,可以计算左右子树有几个节点以及编号.因此,不断dfs下去就可以了. #include<cstdio> #include<cstring> ...