In this example, a query is set using group that will bundle the data with a single property.

KeyWords

  • Grouping Grouped data
    • List<Manager> staff = new List<Manager> { HR, Sales, IT };
      List<EMP> emps = new List<EMP> { clerk, salesrep, technician, developer,hrclerk,hrrep };
  • GroupJoin
    • var query = staff.GroupJoin(emps, admins => admins -----
  • Comparing and revisiting join (Inner Join)
    • var query2 = from tech in ts join std in st on tech.Subject equals std.Subject -----

Step: 1 Create a new or copy mm.LINQIntro20 as mm.LINQIntro20B

Step: 2 Codes: in the classes

Student.cs

using System;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

/// <summary>
/// Summary description for Player
/// </summary>
public class Student
{
public string Name { get; set; }
public string Subject { get; set; }
public int ID { get; set; }
public List<int> Scores { get; set; }
public Student()
{
// TODO: Add constructor logic here
}
public Student[] GetStudent()
{
Student[] student =
{ new Student { Name="Daniel",Subject="Chemistry",ID=8, Scores= new List<int> {96, 92, 94, 99} },
new Student { Name="David",Subject="Chemistry",ID=8 , Scores= new List<int> {94, 92, 94, 87} },
new Student { Name="Brandon",Subject="Chemistry",ID=8 , Scores= new List<int> {99, 92, 94, 89} },
new Student { Name="Zared",Subject="English",ID=4 , Scores= new List<int> {99, 92, 94, 95} },
new Student { Name="Vishal",Subject="History",ID=1 , Scores= new List<int> {99, 92, 94, 95} } };
return student;
}

}
 

Teacher.cs

using System;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

/// <summary>
/// Summary description for Teacher
/// </summary>
public class Teacher
{

public string Name { get; set; }
public string Subject { get; set; }
public int CourseID { get; set; }
public List<int> Scores { get; set; }
public Teacher()
{
// TODO: Add constructor logic here
}
public Teacher[] GetTeacher()
{
Teacher[] teacher = { new Teacher { Name="Mr.Smth",Subject="Chemistry",CourseID=8 },
new Teacher { Name="Ms.Jones",Subject="Music",CourseID=6 },
new Teacher { Name="Ms.Kovak",Subject="English",CourseID=4 },
new Teacher { Name="Mr.Menon",Subject="History",CourseID=1 } };
return teacher;
}
}
 

Manager.cs

using System;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

/// <summary>
/// Summary description for Manager
/// </summary>
public class Manager
{
public string Name { get; set; }
public string Div { get; set; }
public Manager()
{
//
// TODO: Add constructor logic here
//
}
}
 

EMP.cs

using System;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

/// <summary>
/// Summary description for EMP
/// </summary>
public class EMP
{
public string Name { get; set; }
//Get Manager class
public Manager DIV { get; set; }
public EMP()
{
//
// TODO: Add constructor logic here
//
}
}
 

Default.aspx.cs

using System;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Manager HR = new Manager { Name = "Smith, Lorren", Div="HR" };
Manager Sales = new Manager { Name = "Hensen, Rod",Div="Sales" };
Manager IT = new Manager { Name = "Patel, Dinesh", Div="IT" };
//one to many grouping and with left or inner join
EMP clerk = new EMP { Name = "Neelam, Batra", DIV = Sales };
EMP salesrep = new EMP { Name = "Joe, Hernandez", DIV = Sales };
EMP technician = new EMP { Name = "Shean, Delan", DIV = IT };
EMP developer = new EMP { Name = "Noore, Ahamed", DIV = IT };
EMP hrclerk = new EMP { Name = "Danile, Dores", DIV = HR };
EMP hrrep = new EMP { Name = "Stan, Reges", DIV = HR };
//Listing the object from Manager and EMPclass
List<Manager> staff = new List<Manager> { HR, Sales, IT };
List<EMP> emps = new List<EMP> { clerk, salesrep, technician, developer,hrclerk,hrrep };
//GroupJoin
// anonymous type that contains a admins's name and
// a collection of names of the emps and the division they manage
var query = staff.GroupJoin(emps, admins => admins, emp => emp.DIV,
(admins, empMany) =>
new
{
adminsName = admins.Name, adminDiv = admins.Div,
empsName = empMany.Select(emp => emp.Name)
});

L1.Text += "<u> DIV empMany-Collection </u><br/>"; ;
foreach (var obj in query)
{
// Output the owner's name.
L1.Text +=" <u>Manager </u>: " + obj.adminsName + " <u>Div</u> "+ obj.adminDiv+ " <u>Emp</u>: ";
// Output each of the owner's emp's names.
foreach (string emp in obj.empsName)
{
L1.Text += " "+ emp + " ; ";
}
L1.Text += "<br/>";
}
Student students = new Student();
Teacher teachers = new Teacher();
Student[] st = students.GetStudent();
Teacher[] ts = teachers.GetTeacher();
// Inner Join
var query2 = from tech in ts
join std in st on tech.Subject equals std.Subject
select new
{
TeacherName = tech.Name,
TeacherSubject = tech.Subject,
StudentName = std.Name
};

L1.Text += "<br/><u> Teacher Student-Collection Subject </u><br/>";
foreach (var item in query2)
{
L1.Text += item.TeacherName + " " + item.TeacherSubject +" " + item.StudentName + "<br/>";
// L1.Text += item.TeacherName + " " + item.TeacherSubject;
// foreach (var str in item.StudentName)
// {
// L1.Text += str;
// }
L1.Text += " ";
}
}
}

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>mm.LINQIntro20B : groupin and group method</title>
<link href="main.css" rel="stylesheet" type="text/css" />

</head>
<body>
<form id="form1" runat="server">
<div id="div1">
<table ><tr><td colspan="2" >
&nbsp; Grouping : This is an extension of mm.LINQIntro13, mm.LINQIntro20, here
we are testing and compring Group and Groupin , </td>
</tr>
<tr>
<td id="td1" ><asp:Label ID="L1" runat="server" Text=""></asp:Label>
</td>
<td id="td2">&nbsp;</td>
</tr><tr><td >&nbsp;</td>
<td >&nbsp;</td>
</tr>

</table>
</div>
</form>
</body>
</html>

 

Step: 3 Runtime views

Step: 4: In inner join the teacher's name is not grouped therefore appearing with each student , whereas in GroupJoin bundles all the employees under one administrator

Step: 5

Step: 6

Step: 1

Step: 1