Hi Prasunjeet,
I have created one sample that full-fill your requirement.
HTML
<asp:GridView runat="server" ID="gvDetails">
</asp:GridView>
Code
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Hotel Datatable
DataTable hotel = new DataTable();
hotel.Columns.AddRange(new DataColumn[2] {
new DataColumn("hotelid", typeof(int)),
new DataColumn("hotelname", typeof(string)) });
hotel.Rows.Add(1, "Surya");
hotel.Rows.Add(2, "Saffron");
hotel.Rows.Add(3, "Taj");
//Roomtype Datatable
DataTable roomtype = new DataTable();
roomtype.Columns.AddRange(new DataColumn[3] {
new DataColumn("roomtypeid", typeof(int)),
new DataColumn("roomtypename", typeof(string)),
new DataColumn("hotel_id", typeof(int)) });
roomtype.Rows.Add(1, "Normal AC", 1);
roomtype.Rows.Add(2, "Normal NonAC", 1);
roomtype.Rows.Add(3, "Flooring", 2);
roomtype.Rows.Add(4, "Marble", 2);
roomtype.Rows.Add(5, "AC Marble", 3);
roomtype.Rows.Add(6, "NonAC Marble", 3);
//Room Datatable
DataTable room = new DataTable();
room.Columns.AddRange(new DataColumn[3] {
new DataColumn("roomid", typeof(int)),
new DataColumn("roomno", typeof(string)),
new DataColumn("roomtype_id", typeof(int)) });
room.Rows.Add(1, "100", 1);
room.Rows.Add(2, "101", 2);
room.Rows.Add(3, "102", 4);
room.Rows.Add(4, "103", 6);
//Query
var result = from htl in hotel.AsEnumerable()
join rtype in roomtype.AsEnumerable() on htl.Field<int>("hotelid") equals rtype.Field<int>("hotel_id")
join rm in room.AsEnumerable() on rtype.Field<int>("roomtypeid") equals rm.Field<int>("roomtype_id")
select new
{
roomno = rm.Field<string>("roomno"),
roomtypename = rtype.Field<string>("roomtypename"),
hotelname = htl.Field<string>("hotelname")
};
this.gvDetails.DataSource = result;
this.gvDetails.DataBind();
}
}
Screenshot
![](https://i.imgur.com/1usmWDg.gif)