Join on a query result in CSharp
Description
The following code shows how to join on a query result.
Example
// w w w . j a v a 2s. c om
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Reflection;
class Salary
{
int _id;
int _year;
double _salary;
public int ID
{
get { return _id; }
set { _id = value; }
}
public int Year
{
get { return _year; }
set { _year = value; }
}
public double SalaryPaid
{
get { return _salary; }
set { _salary = value; }
}
}
class Employee
{
int _id;
int _idRole;
string _lastName;
string _firstName;
public int ID
{
get { return _id; }
set { _id = value; }
}
public int IDRole
{
get { return _idRole; }
set { _idRole = value; }
}
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
class MyRole
{
int _id;
string role;
public int ID
{
get { return _id; }
set { _id = value; }
}
public string Role
{
get { return role; }
set { role = value; }
}
}
public class MainClass
{
public static void Main()
{
List<Employee> people = new List<Employee> {
new Employee { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"},
new Employee { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"},
new Employee { ID = 3, IDRole = 2, LastName = "G", FirstName = "M"},
new Employee { ID = 4, IDRole = 3, LastName = "C", FirstName = "G"}
};
List<MyRole> roles = new List<MyRole> {
new MyRole { ID = 1, Role = "Manager" },
new MyRole { ID = 2, Role = "Developer" }
};
List<Salary> salaries = new List<Salary> {
new Salary { ID = 1, Year = 2004, SalaryPaid = 10.00 },
new Salary { ID = 1, Year = 2005, SalaryPaid = 15.00 },
new Salary { ID = 1, Year = 2005, SalaryPaid = 15.00 }
};
var query = from p in people
join s in salaries on p.ID equals s.ID
select new { p.FirstName, p.LastName, s.SalaryPaid };
var querySum = from q in query
group q by q.LastName into gp
select new { LastName = gp.Key, TotalSalary = gp.Sum(q => q.SalaryPaid) };
foreach (var v in querySum)
{
Console.WriteLine(v.LastName);
}
}
}
The code above generates the following result.