Linq to SQL 的连表查询(转)

关于数据库的查询中经常需要用到多表的连接查询,这里就简单地展示关于linq的查询功能。

1、单表的查询

[csharp] view plain copy

    var query = from tc in db.tbClass
             where tc.ClassID == "1"
                //查询表tbClass
            select new {
            ClassID=tc.ClassID,
            ClassName=tc.ClassName
                }  

2、多表内连接查询

[csharp] view plain copy

    var query = from s in db.tbStudents
                                join c in db.tbClass 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
                                    }
                                };  

内连接与SqL中inner join一样,即找出两个序列的交集。

3、外连接

[csharp] view plain copy

    var query = from s in db.tbStudents
                                join c in db.tbClass on s.ClassID equals c.ClassID into tbC
                                from tbCw in tbC.DefaultIfEmpty()
                                where s.ClassID == 3
                                select new
                                {
                                    ClassID = s.ClassID,
                                    ClassName = tbCw.ClassName,
                                    Student = new
                                    {
                                        Name = s.Name,
                                        StudentID = s.StudentID
                                    }
                                };  

注意点在与外连接的时候 from外接表的时候需要进行into到新的变量中,然后进行调用DefaultIfEmpty()方法。
时间: 2024-10-12 20:35:54

Linq to SQL 的连表查询(转)的相关文章

基于ACCESS和ASP的SQL多个表查询与计算统计代码

最近在写几个关于"Project - Subitem - Task"的管理系统,说是系统还是有点夸大了,基本就是一个多表查询调用和insert.update的数据库操作,只是出现不少计算和统计的问题,使得SQL显得复杂.所以,有必要在一个阶段任务完成后,做一次总结,把一些测试过程中的SQL代码做总结,以防以后用到又忘记了,也欢迎各位DB码农一起吐槽. 这几个月陆续写了几个系统,最后一个系统是信用卡管理系统,也是SQL累积到较复杂的阶段,以这个为例子来整理这段时间以来的基于ACCESS和

数据库SQL的多表查询

数据库 SQL 的多表查询:eg: table1: employees, table2: departments,table3: salary_grades; 一:内连接: 1):等值连接: 把表employees中的department_id 与表departmes中的department_id相匹配的找出来 select e.last_name, d.department_id from employees e,departments d where e.department_id = d.

SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)

一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查询时可以利用等值关联字段消除笛卡尔积 多表查询之中,每当增加一个关联表都需要设置消除笛卡尔积的条件 分析过程很重要: 确定所需要的数据表 确定已知的关联字段: 按照SQL语句的执行步骤编写:FROM,WHERE,SELECT,ORDER BY (由于SELECT是在WHERE子句之后执行,所以SELECT子句所定义的别名WHERE不可以直接使用) (由于SELEC

LINQ体验(17)——LINQ to SQL语句之动态查询

高级特性 本文介绍LINQ的高级特性,其包括大家都关心的动态查询的用法,另外简单提下ID标识这个知识. 动态查询 有这样一个场景:应用程序可能会提供一个用户界面,用户可以使用该用户界面指定一个或多个谓词来筛选数据.这种情况在编译时不知道查询的细节,动态查询将十分有用. 在LINQ中,Lambda表达式是许多标准查询运算符的基础,编译器创建lambda表达式以捕获基础查询方法(例如 Where.Select.Order By.Take While 以及其他方法)中定义的计算.表达式目录树用于针对数

SQL总结 连表查询

连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. 注意

Sql Server连表查询字段为null

这是一个坑,并且是有毒的坑. 一不小心我就掉进了这个坑里面,费了好大的力气这才从坑里面爬出来. 话不多说,开始吹BB啦. 一.简单说说遇到的问题: 连表查询,一对多. 出现 int,  smalldatetime等非string类型的字段为null. 操作如下: 1.sql语句查询,结果完全准确. 2.直接后台获取,结果有点不一样,出现异常. 二.解决办法如下: 使用 ISNULL(value1, value2) 1.value1与value2的数据类型必须一致. 2.如果value1的值不为n

LINQ to DataSet 之单表查询

       查询单个数据表        根据Linq to DataSet概述的步骤, 第一步我们获取数据源,我们这里手动创建一个datatable数据源 static DataSet BuildOneDTDataSet() { string[] nameset = { "张三", "李思思", "lisi", "王五", "路六", "欧赔", "夏琪",&qu

sql根据一个表查询的数据作为条件查询另一个表

代码格式如下: select * from BillConsume where obId in (select obId from OpenBills where clearTheMarket is null or clearTheMarket=0) 要注意的是:in后面的查询语句必须是查询一个字段跟前面的表相对应的.比如要根据订单号orderID,OpenBills 这个表就需要查询到orderID这个字段,BillConsume这个表的条件就要判断orderID

sql 经典四表查询

题 目 : student(sid, sname, sage, ssex) -- 学生信息表(学生编号 自增,学生姓名, 学生出生年月, 性别): teacher(tid, tname) -- 教师信息表(教师编号 自增, 教师姓名) course(cid, cname, tid) -- 课程表(课程编号 自增, 课程名称, 教师编号 外键) sc(sid, cid, score) --  分数表(学生编号,课程编号,分数) create database work; use work;set