Scroll To Top

Joins Using LINQ-to-XML

By Vijay Prativadi Nov 05, 2012
Today, in this article let's play around with one of the interesting and most useful concept in XML.


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


Step 2: The complete code of Employee.xml looks like this:

<?xml version="1.0" encoding="utf-8" ?>


  <Employee Id="1">





  <Employee Id="2">





  <Employee Id="3">







Step 3: The complete code of Department.xml looks like this:

<?xml version="1.0" encoding="utf-8" ?>


  <Department DepartmentId="1" EmpId="1">



  <Department DepartmentId="2" EmpId="1">



  <Department DepartmentId="3" EmpId="2">




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" "">

<html xmlns="">

<head id="Head1" runat="server">

    <style type="text/css">



            margin-top: 50px;






    <form id="form1" runat="server">





                    <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 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 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" />










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;






Step 6: The output of application looks like this


Step 7: The data retrieved output of application looks like this