LINQ to SQL Cross Join

In LINQ to SQL, the cross join will produce a Cartesian product of the collection items. In cross join, we don't need to write any condition to join two tables, and it makes multiplication of record number from both the tables that mean each row on the left table will relate to each row of the right table.

Syntax of LINQ to SQL Cross Join

Following is the syntax of using LINQ to SQL Cross Join to get the Cartesian product of collections.

 

C# Code

 

var result = from ed in db.EmployeeDetails
             from d in db.Departments
             select new
             {
               Name = ed.EmpName,
               Department = d.DeptName
             };

VB.NET Code

 

Dim result = From ed In db.EmployeeDetails From d In db.Departments Select New With {.Name = ed.EmpName, .Department = d.DeptName}

If you observe the above syntax, we used “EmployeeDetails”, “Departments” tables to get the Cartesian product of data without using any join.

Example of LINQ to SQL Cross Join

Before we start implementing LINQ to SQL cross join example, first, we need to create a database with required tables and map those tables to LINQ to SQL file (.dbml). If you don't know the process, don't worry check this link create and map database tables to LINQ to SQL file (.dbml).

 

Once we create and map required tables to the .dbml file now, we will show data in our application for that Right-click on the application à select Add à New Item à Select Web Form à Give name as Default.aspx and click OK button.

 

Now open the Default.aspx page and write the code as shown below.

 

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Show Employee Details in Gridview</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvDetails" runat="server"></asp:GridView>
</div>
</form>
</body>
</html>

Now open the code behind file and write the code as shown below.

 

C# Code

 

protected void Page_Load(object sender, EventArgs e)
{
  EmployeeDBDataContext db = new EmployeeDBDataContext();
  if (!Page.IsPostBack)
  {
    var result = from ed in db.EmployeeDetails
                 from d in db.Departments
                 select new
                 {
                   Name = ed.EmpName,
                   Location = ed.Location,
                   Gender = ed.Gender,
                   Department = d.DeptName
                 };
    gvDetails.DataSource = result;
    gvDetails.DataBind();
  }
}

VB.NET Code

 

Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim db As New EmployeeDBDataContext()
If Not Page.IsPostBack Then
Dim result = From ed In db.EmployeeDetails From d In db.Departments Select New With {.Name = ed.EmpName, .Location = ed.Location, .Gender = ed.Gender, .Department = d.DeptName}
gvDetails.DataSource = result
gvDetails.DataBind()
End If
End Sub
End Class

If you observe the above example, we are getting data from the “EmployeeDetails” and “Departments” table without using any join.

Result of LINQ to SQL Cross Join Example

Following is the result of the LINQ to SQL cross join example.

 

LINQ to SQL Cross Join Example Result

 

This is how we can use LINQ to SQL cross join in c#, vb.net to get the cartesian product of data from multiple tables based on our requirements.