The most important thing for you is to know how to execute INNER JOIN and OUTER JOIN .
For an INNER JOIN, you use a JOIN from LINQ, for example:

var result = TableA .Join(TableB, left => left.Id, right => right.ForeignKeyToTableA, (left, right) => new { TableAColumns = left, TableBColumns = right });
TOP COMPONENTS that you have already indicated in your example.
Now you need to mix what you know to get the desired results.
For example, to execute a FULL OUTER JOIN, do something like this pseudocode in LINQ:
SELECT TableA.*, TableB.* FROM TableA LEFT OUTER JOIN TableB UNION SELECT TableA.*, TableB.* FROM TableB LEFT OUTER JOIN TableA

It will be in LINQ as follows:
var fullOuterJoin = ( TableA .GroupJoin(TableB, left => left.Id, right => right.ForeignKeyId, (left, right) => new { TableA = left, TableB = right }) .SelectMany(p => p.TableB.DefaultIfEmpty(), (x, y) => new { TableA = x.TableA, TableB = y }) ) .Union ( TableB .GroupJoin(TableA, left => left.Id, right => right.ForeignKeyId, (left, right) => new { TableA = right, TableB = left }) .SelectMany(p => p.TableA.DefaultIfEmpty(), (x, y) => new { TableA = y, TableB = x.TableB }) );
Last example of your image:

var fullOuterJoinOnlyWithNulls = fullOuterJoin .Where(p => p.TableA == null || p.TableB == null);
A RIGHT OUTER JOIN is nothing more than a LEFT OUTER JOIN, where you change your result columns as follows:

var rightOuterJoin = ( TableB .GroupJoin(TableA, left => left.Id, right => right.ForeignKeyId, (left, right) => new { TableA = right, TableB = left }) .SelectMany(p => p.TableA.DefaultIfEmpty(), (x, y) => new { TableA = y, TableB = x.TableB }) );
Similarly, you can build all the scripts of your example. Just check the tables for zero if necessary.