Linq一对多联合查询

问题:

学生表,班级表,我要班级下面学生

A表,字段:AID,CLASS
B表,字段 :BID,BNAME,AID
A表数据
1 班级1
2 班级2
B表数据
1 学生1 1
2 学生2 1 
3 学生3 2
4 学生4 2
我想得到
CLASS NAME
班级1 学生1,学生2
班级2 学生3,学生4
这样怎么联合?

答案:

namespace ConsoleApplication1
{
    public class A
    {
        public int AID { get; set; }
        public string Class { get; set; }
    }

    public class B
    {
        public int BID { get; set; }
        public string BName { get; set; }
        public int AID { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<A> A = new List<A>()
            {
                new A(){ AID = 1, Class="班级1" },
                new A(){ AID = 2, Class="班级2" },
            };

            List<B> B = new List<B>()
            {
                new B(){ BID = 1 , BName = "学生1", AID=1 },
                new B(){ BID = 2 , BName = "学生2", AID=2 },
                new B(){ BID = 3 , BName = "学生3", AID=1 },
                new B(){ BID = 4 , BName = "学生4", AID=2 },
            };

            var lastResult = from p in A
                             join q in B.GroupBy(x => x.AID).Select(x => new { Key = x.Key, Value = string.Join(",", B.Where(y => y.AID == x.Key).Select(y => y.BName)) })
                             on p.AID equals q.Key
                             select new
                             {
                                 CLASS = p.Class,
                                 Name = q.Value,
                             };

            foreach (var item in lastResult)
            {
                Console.WriteLine(item);
            }
        }
    }
}
时间: 2024-08-04 19:23:26

Linq一对多联合查询的相关文章

Linq学习(四)-联合查询

一.本将主要介绍 Union.Concat.Intersect.Except的使用操作 1.Union 查询昵称中带有Friend和带有Lee的用户 Linq (from a in Blog_Users where a.NickName.Contains("Lee") select a) .Union (from a in Blog_Users where a.NickName.Contains("Friend") select a) sql -- Region P

Linq联合查询

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LINQ01 { class Program { static void Main(string[] args) { //初始化武林高手 var masterList = new List<MartialArtsMaster>() { new M

linq中如何实现多个条件的联合查询

目前接触处理数据这一块比较多,在处理内存中的数据源的时候我一般使用的是linq,linq使用起来像sql语句一样,用法简单,功能强大. 最近需要实现一个从两个不同的文件读取不同的数据,然后根据这两个数据的一些字段经行联合,然后把他们的结果放到一个数据源里面里啊,一般的联合查询两个数据源,都是通过一个数据源的字段和另一个数据源的字段经行匹配就可以了,如果是这样的话在linq实现和在sql里面实现其实差不多,下面是单个条件的联合查询的代码如下所示 var result1 = from l1 in l

EF 表联合查询 join

有两张表m_Dept.m_User,联合查询 linq方式.EF方式 private void Add() { List<m_Dept> lst = new List<m_Dept>{ new m_Dept { DName = "开发", ID = "1" }, new m_Dept { DName = "测试", ID = "2" }, new m_Dept { DName = "财务&qu

MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例

工具:VS.net2013.EF6.MVC5.SQLServer2008 参考出处: http://www.cnblogs.com/slark/p/mvc-5-get-started-create-project.html http://www.cnblogs.com/miro/p/4288184.html http://www.cnblogs.com/dotnetmvc/p/3732029.html 一.准备工作 在SqlServer上创建数据库:Element 模拟两个表并插入数据:SysU

MyBatis 多表联合查询及优化 以及自定义返回结果集

下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了简单期间,你可以不用搭前端的框架,只使用 Spring + MyBatis 就可以,外加 junit 测试即可.环境我就不带大家搭了,这里只说涉及到联合查询的操作. 设计好表之后,我用到了 mybatis 的自动生成工具 mybatis generator 生成的实体类.mapper 接口.以及 m

MyBatis之三:多表联合查询

在这篇文章里面主要讲解如何在mybatis里面使用一对一.一对多.多表联合查询(类似视图)操作的例子. 注:阅读本文前请先大概看一下之前两篇文章. 一.表结构 班级表class,学生表student,班级学生关系表ClassStudent. 这里一个学生只会在一个班级里面,也就是一对一的关系:一个班级有多个学生,也就是一对多的关系. 结构如下: CREATE TABLE [dbo].[Class]( [class_id] [int] NOT NULL, [class_name] [varchar

高级数据操作--联合查询

一.联合查询 1 -- 关键字: union 2 3 -- 语法 4 select 语句1 5 union[union 选项] 6 select 语句2 7 union[union 选项] 8 ...... 9 union[union 选项] 10 select 语句n; 所谓的联合查询,就是将多个查询语句的结果进行纵向上的拼接,也就是将select语句2的查询结果放在select语句1的后面!很显然,总的记录数增加了,但是字段的数量并没有增加! 既然是多个查询记录的拼接,所以联合查询有一个最基

MyBatis 多表联合查询及优化

序 这篇文章我打算来简单的谈谈 mybatis 的多表联合查询.起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也是一搜罗一大堆,根本就用不着我来重复.但是吧,就我前几天在做一个多表联合查询的时候,竟然出了很多意想不到的问题,而且这些问题的出现,并不是对 mybatis 不了解,而是在用的过程中会或多或少的忽略一些东西,导致提示各种错误. 背景 老规矩,开始之前,还是要先说说这件事的背景.也就是最近几天,公司要做一个后台的管理平台,由于之前的一