diff --git a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight.csproj b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight.csproj
index 2150e3797b..ed9781c223 100644
--- a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight.csproj
+++ b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net10.0
enable
enable
diff --git a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Program.cs b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Program.cs
index 769e5ee466..d6a0e64c16 100644
--- a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Program.cs
+++ b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Program.cs
@@ -52,6 +52,32 @@
Console.WriteLine();
Console.WriteLine();
+Console.WriteLine("Left outer join - LeftJoin method");
+Console.WriteLine();
+
+results = Utilities.PerformLeftJoinWithLeftJoinMethod(Utilities.Songs, Utilities.Authors);
+
+foreach (var item in results)
+{
+ Console.WriteLine($"Title: {item.Title}, Author: {item.AuthorName}");
+}
+
+Console.WriteLine();
+Console.WriteLine();
+
+Console.WriteLine("Right outer join - RightJoin method");
+Console.WriteLine();
+
+results = Utilities.PerformRightJoinWithRightJoinMethod(Utilities.Songs, Utilities.Authors);
+
+foreach (var item in results)
+{
+ Console.WriteLine($"Title: {item.Title}, Author: {item.AuthorName}");
+}
+
+Console.WriteLine();
+Console.WriteLine();
+
Console.WriteLine("Full outer join");
Console.WriteLine();
diff --git a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/SongWithAuthorComparer.cs b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/SongWithAuthorComparer.cs
index 8ec28261ae..29e0f19d53 100644
--- a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/SongWithAuthorComparer.cs
+++ b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/SongWithAuthorComparer.cs
@@ -6,16 +6,11 @@ internal class SongWithAuthorComparer : IEqualityComparer
{
public bool Equals(SongWithAuthor? x, SongWithAuthor? y)
{
- if (x?.AuthorName == y?.AuthorName && x?.Title == y?.Title)
- {
- return true;
- }
-
- return false;
+ return x?.AuthorName == y?.AuthorName && x?.Title == y?.Title;
}
public int GetHashCode([DisallowNull] SongWithAuthor obj)
{
- return obj.AuthorName.GetHashCode();
+ return HashCode.Combine(obj.Title, obj.AuthorName);
}
}
diff --git a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Utilities.cs b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Utilities.cs
index 7c27f5961d..76f14fc56a 100644
--- a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Utilities.cs
+++ b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/HowToCreateAnOuterJoinInLINQLeftAndRight/Utilities.cs
@@ -92,6 +92,38 @@ public static List PerformRightJoinWithMethodSyntax(
return results.ToList();
}
+
+ public static List PerformLeftJoinWithLeftJoinMethod(
+ List songs, List authors)
+ {
+ var results = songs.LeftJoin(
+ authors,
+ song => song.AuthorId,
+ author => author.Id,
+ (song, author) => new SongWithAuthor
+ {
+ Title = song.Title,
+ AuthorName = author?.Name ?? "unknown"
+ });
+
+ return results.ToList();
+ }
+
+ public static List PerformRightJoinWithRightJoinMethod(
+ List songs, List authors)
+ {
+ var results = songs.RightJoin(
+ authors,
+ song => song.AuthorId,
+ author => author.Id,
+ (song, author) => new SongWithAuthor
+ {
+ Title = song?.Title ?? "-",
+ AuthorName = author.Name
+ });
+
+ return results.ToList();
+ }
public static List PerformFullOuterJoin(
List songs, List authors)
diff --git a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/HowToCreateAnOuterJoinInLINQLeftAndRightUnitTest.cs b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/HowToCreateAnOuterJoinInLINQLeftAndRightUnitTest.cs
index 7a5c713c13..ffbcf6f51c 100644
--- a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/HowToCreateAnOuterJoinInLINQLeftAndRightUnitTest.cs
+++ b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/HowToCreateAnOuterJoinInLINQLeftAndRightUnitTest.cs
@@ -104,6 +104,56 @@ public void GivenTwoDataSources_WhenPerformRightJoinWithMethodSyntaxMethodCalled
Assert.Equal(authors.Count, output);
}
+ [Fact]
+ public void GivenTwoDataSources_WhenPerformLeftJoinWithLeftJoinMethodCalled_ThenAllItemsFromLeftSourceAreReturned()
+ {
+ // Arrange
+ List songs =
+ [
+ new() { Id = 1, Title = "song A", AuthorId = 3 },
+ new() { Id = 2, Title = "song B", AuthorId = 1 },
+ new() { Id = 3, Title = "song C", AuthorId = 5 },
+ new() { Id = 4, Title = "song D", AuthorId = 2 }
+ ];
+
+ List authors =
+ [
+ new() { Id = 1, Name = "Author A" },
+ new() { Id = 9, Name = "Author B" }
+ ];
+
+ // Act
+ var output = Utilities.PerformLeftJoinWithLeftJoinMethod(songs, authors).Count;
+
+ // Assert
+ Assert.Equal(songs.Count, output);
+ }
+
+ [Fact]
+ public void GivenTwoDataSources_WhenPerformRightJoinWithRightJoinMethodCalled_ThenAllItemsFromRightSourceAreReturned()
+ {
+ // Arrange
+ List songs =
+ [
+ new() { Id = 1, Title = "song A", AuthorId = 3 },
+ new() { Id = 2, Title = "song B", AuthorId = 1 },
+ new() { Id = 3, Title = "song C", AuthorId = 5 },
+ new() { Id = 4, Title = "song D", AuthorId = 2 }
+ ];
+
+ List authors =
+ [
+ new() { Id = 1, Name = "Author A" },
+ new() { Id = 9, Name = "Author B" }
+ ];
+
+ // Act
+ var output = Utilities.PerformRightJoinWithRightJoinMethod(songs, authors).Count;
+
+ // Assert
+ Assert.Equal(authors.Count, output);
+ }
+
[Fact]
public void GivenTwoDataSources_WhenPerformFullOuterJoinMethodCalled_ThenAllItemsFromBothSourcesAreReturned()
{
diff --git a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/Tests.csproj b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/Tests.csproj
index 615d2e1e84..b79bfbeb8f 100644
--- a/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/Tests.csproj
+++ b/csharp-linq/HowToCreateAnOuterJoinInLINQLeftAndRight/Tests/Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
enable
enable
@@ -10,13 +10,13 @@
-
-
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all