Introduction
Today, in this article let's 
play around with one of the interesting and most useful concept in XML.
Question: What 
are joins using LINQ-to-XML?
 
In simple terms "It enables 
perform a join between two XML files and retrieve the value into grid as a 
result set".
Step 1: Create 
a new WebForm project
![New-Project-VS.jpg]()
Step 2: The 
complete code of Employee.xml looks like this:
<?xml
version="1.0"
encoding="utf-8" 
?>
<Employees>
  <Employee
Id="1">
    <FirstName>Vijay</FirstName>
    <LastName>Prativadi</LastName>
    <Age>26</Age>
  </Employee>
  <Employee
Id="2">
    <FirstName>Swetha</FirstName>
    <LastName>Prativadi</LastName>
    <Age>23</Age>
  </Employee>
  <Employee
Id="3">
    <FirstName>Ram</FirstName>
    <LastName>Reddy</LastName>
    <Age>30</Age>
  </Employee>
</Employees>
 
Step 3: The 
complete code of Department.xml looks like this:
<?xml
version="1.0"
encoding="utf-8" 
?>
<Departments>
  <Department
DepartmentId="1"
EmpId="1">
    <DepartmentName>Admin</DepartmentName>
  </Department>
  <Department
DepartmentId="2"
EmpId="1">
    <DepartmentName>HR</DepartmentName>
  </Department>
  <Department
DepartmentId="3"
EmpId="2">
    <DepartmentName>IT</DepartmentName>
  </Department>
</Departments>
Step 4: The 
complete code WebForm1.aspx looks like this:
<%@
Page Language="C#"
AutoEventWireup="true"
CodeBehind="WebForm1.aspx.cs"
Inherits="JoinsusingLINQtoXMLApp.WebForm1"
%>
 
<!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
id="Head1" runat="server">
    
<style type="text/css">
        
.grid
        {
           
margin-top: 50px;
        }
    
</style>
    
<title></title>
</head>
<body>
    
<form id="form1"
runat="server">
    
<center>
       
<div>
           
<table>
               
<tr>
                   
<td
colspan="2"
align="center">
                       
<asp:Label
ID="Label1"
runat="server"
Text="Joins using 
LINQ-to-XML" Font-Bold="true"
                           
Font-Size="Large"
Font-Names="Verdana"
ForeColor="Maroon"></asp:Label>
                   
</td>
               
</tr>
               
<tr>
                   
<td
colspan="2"
align="center">
                       
<asp:Button
ID="Button1"
runat="server"
Text="Select Data"
Font-Names="Verdana"
Width="213px"
                            BackColor="Orange"
Font-Bold="True"
OnClick="Button1_Click"
/>
                   
</td>
               
</tr>
               
<tr>
                   
<td
colspan="2"
align="center">
                       
<asp:GridView
ID="GridView1"
runat="server"
CssClass="grid"
BackColor="LightGoldenrodYellow"
                           
BorderColor="Tan"
BorderWidth="1px"
CellPadding="2"
ForeColor="Black"
GridLines="None">
                           
<AlternatingRowStyle
BackColor="PaleGoldenrod"
/>
                           
<FooterStyle
BackColor="Tan"
/>
                           
<HeaderStyle
BackColor="Tan"
Font-Bold="True"
/>
                           
<PagerStyle
BackColor="PaleGoldenrod"
ForeColor="DarkSlateBlue"
HorizontalAlign="Center"
/>
                           
<SelectedRowStyle
BackColor="DarkSlateBlue"
ForeColor="GhostWhite"
/>
                           
<sortedascendingcellstyle
backcolor="#FAFAE7"
/>
                           
<sortedascendingheaderstyle
backcolor="#DAC09E"
/>
                           
<sorteddescendingcellstyle
backcolor="#E1DB9C"
/>
                           
<sorteddescendingheaderstyle
backcolor="#C2A47B"
/>
                       
</asp:GridView>
                   
</td>
               
</tr>
            </table>
       
</div>
    
</center>
    
</form>
</body>
</html>
Step 5: The 
complete code WebForm1.aspx.cs looks like this:
using 
System;
using 
System.Collections.Generic;
using 
System.Linq;
using 
System.Web;
using 
System.Web.UI;
using 
System.Web.UI.WebControls;
using 
System.Xml.Linq;
namespace 
JoinsusingLINQtoXMLApp
{
    
public partial 
class WebForm1 : System.Web.UI.Page
    {
       
protected void 
Page_Load(object sender,
EventArgs e)
        {
        }
       
protected void 
Button1_Click(object sender,
EventArgs e)
        {
           
XElement department =
XElement.Load(@"c:\users\administrator\documents\visual 
studio 2010\Projects\JoinsusingLINQtoXMLApp\JoinsusingLINQtoXMLApp\Department.xml");
           
XElement employee =
XElement.Load(@"c:\users\administrator\documents\visual 
studio 2010\Projects\JoinsusingLINQtoXMLApp\JoinsusingLINQtoXMLApp\Employee.xml");
           
var joinQuery = from 
r in department.Descendants("Department")
                           
join s in 
employee.Descendants("Employee")
on (int)r.Attribute("EmpId")
equals (int)s.Attribute("Id")
                           
select 
new
                                {
                                    EmpId = (int)s.Attribute("Id"),
                                    FirstName = (string)s.Element("FirstName"),
                                    LastName = (string)s.Element("LastName"),
                                    Age = (int)s.Element("Age"),
                                    DepartmentName = (string)r.Element("DepartmentName")
                    
            };
            
GridView1.DataSource = joinQuery;
            
GridView1.DataBind();
        }
    }
}
 
Step 6: The 
output of application looks like this
![Join-using-linq.jpg]()
 
Step 7: The 
data retrieved output of application looks like this
![Retrieved-Join-using-linq.jpg]()