参考文章地址:http://www.cnblogs.com/yubaolee/p/BestLinqQuery.html   以下是我自己的总结:

表结构:

本文全部代码基于:UserInfo与Class两个表,其中Class中的UserId与UserInfo中的Id对应

linq联合查询

内联查询

内联是一个实际使用频率很高的查询,它查询两个表共有的且都不为空的部分

  1. from user in UserInfo
  2. join c in Classes on user.Id equals c.UserId
  3. select new
  4. {
  5. user.UserName,
  6. user.Id,
  7. c.ClassName
  8. }

查询结果

左联查询

左联应该是联合查询中使用频率最高的查询。它以左表为准,进行联合查询。如果右表中不存在对应的结果,则置空。(注意:在Linq中是不存在右联连的说法,因为右联无非是把左边的表移动到右边,查询的结果与左联是一样的)

  1. from user in UserInfo
  2. join c in Classes on user.Id equals c.UserId into temp
  3. from c in temp.DefaultIfEmpty()
  4. select new
  5. {
  6. user.UserName,
  7. user.Id,
  8. c.ClassName
  9. }

查询结果

合并(Union)

这种查询其实也很少用,但在某些变态业务需求下会非常有用,注意查询的结果。它是合并两个表相同列数的结果,并且如果结果中有相同的行,那么只取一行记录。

  1. (
  2. from userinfo in UserInfo
  3. select new {
  4. Id = (System.Int32?)userinfo.Id,
  5. Name = userinfo.UserName
  6. }
  7. ).Union
  8. (
  9. from c in Classes
  10. select new {
  11. Id = (System.Int32?)c.UserId,
  12. Name = c.ClassName
  13. }
  14. )

查询结果

Linq 分组查询

分组查询(group by)也是我们在实际项目中一个常用的操作,查询操作如下:

  1. from c in Classes
  2. group c by c.UserId into temp
  3. select temp

查询结果

注意一下查询结果,外层是一个我们常用的IQueryable<T>,里面是一个类似Dictionary的K-V集合。简单点说Group返回的是一个集合的集合,因此输出时需用双重循环。

我们在使用它的结果时,应该这样调用:

  1. var result = from c in _context.Classes
  2. group c by c.UserId
  3. into temp
  4. select temp;
  5. foreach (var c in result)
  6. {
  7. Console.WriteLine(c.Key);
  8. foreach (var citem in c)
  9. {
  10. Console.WriteLine(citem.ClassName);
  11. }
  12. }

C# linq to sql的更多相关文章

  1. LINQ to SQL语句(7)之Exists/In/Any/All/Contains

    适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...

  2. 年终巨献 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  3. LINQ to SQL语句(20)之存储过程

    在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...

  4. LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

    它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...

  5. LINQ to SQL语句(18)之运算符转换

    运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...

  6. LINQ to SQL语句(17)之对象加载

    对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...

  7. LINQ to SQL语句(14)之Null语义和DateTime

    Null语义 说明:下面第一个例子说明查询ReportsToEmployee为null的雇员.第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例子相同.在第三 ...

  8. LINQ to SQL语句(10)之Insert

    1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. var newCustomer = new Custo ...

  9. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  10. LinQ to SQL用法详解

    LinQ是指集成化查询语言,通过映射将数据库内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象.O--M--R O-Object对象(李昌辉)R-Relation关系M-Mappin ...

随机推荐

  1. python学习之路---day05

    字典一:基本组成 dic={"",[],{},"",2,} 字典由key 和value组成, key(键):键是不可变的(且必须要不可改变),一个字典中的key ...

  2. 编写高质量代码:Web前端开发修炼之道(一)

    最近老大给我们买来一些技术方面的书籍,其实很少搬着一本书好好的完整的看完过,每每看电子档的,也是打游击式的看看这章,瞅瞅那章,在那5本书中挑了一本比较单薄的<编写高质量代码web前端开发修炼之道 ...

  3. 上海高校程序设计竞赛 D CSL 的字符串 ( 贪心)

    题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. 给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件: 原字符串中出现的字 ...

  4. Oracle 设定字符集

    在Redhat上安装Oracle 10g没有设定字符集,采用的是操作系统默认字符集:WE8ISO8859P1,将字符集修改为:ZHS16GBK.由于过程不可逆,首先需要备份数据库. 1.数据库全备 2 ...

  5. 坐标&接龙型动态规划 - 20181026

    109. Triangle 此题还可以用DFS,记忆化搜索去做,二刷实现 public class Solution { /** * @param triangle: a list of lists ...

  6. 2019.3.13 Java实现分数的四则运算

    Java实现分数的四则运算 自己的写法 markdown太久没写格式不会用了--将就着看 Fraction.java package com.lanou; public class Fraction ...

  7. c#判断一段代码运行所花费的时间

    //定义一个时间对象 System.Diagnostics.Stopwatch oTime = new System.Diagnostics.Stopwatch(); oTime.Start(); / ...

  8. Docker学习笔记--Docker 启动nginx实例挂载目录权限不够(转)

    今天在启动一个docker 运行nginx实例,在挂载目录时,出现访问静态目录时,权限不够 执行的命令是: docker run --name my-nginx -d -p 80:80 --resta ...

  9. [转]NetCat简介

    NetCat是一个非常简单的Unix工具,可以读.写TCP或UDP网络连接(network connection).它被设计成一个可靠的后端(back-end) 工具,能被其它的程序或脚本直接地或容易 ...

  10. RBAC基于角色的权限访问控制

      RBAC是什么,能解决什么难题?ThinkPHP中RBAC实现体系安全拦截器认证管理器访问决策管理运行身份管理器ThinkPHP中RBAC认证流程权限管理的具体实现过程RBAC相关的数据库介绍Th ...