✅ چرا این روش بهتره؟
🔹 قصد (Intent) واضح است: وقتی LeftJoin را میبینی، دقیقاً میدانی چه اتفاقی میافتد.
🔹 کد کمتر، اجزای کمتر: دیگه خبری از GroupJoin، DefaultIfEmpty یا SelectMany نیست.
🔹 همان نتیجه: همهی محصولات حفظ میشن، حتی اگر بعضی از آنها هیچ Reviewای نداشته باشن.
💡 نکته:
در زمان نگارش این مقاله، C# Query Syntax (ساختار from … select …) هنوز کلیدواژههای مخصوص left join یا right join رو نداره.
پس فعلاً باید از Method Syntax استفاده کنی که در مثال بالا نشون داده شده.
🆕 همچنین جدید در RightJoin
EF Core 10:
•RightJoin
تمام ردیفهای سمت راست را حفظ میکند و فقط ردیفهای منطبق از سمت چپ را نگه میدارد.
EF Core
این متد را به RIGHT JOIN در SQL ترجمه میکند.
این روش زمانی کاربرد دارد که سمت دوم دادهها (Right Side) برای ما بخش «ضروری برای حفظ» باشد.
💡 بهصورت مفهومی:
var query = dbContext.Reviews
.RightJoin(
dbContext.Products,
review => review.ProductId,
product => product.Id,
(review, product) => new
{
ProductId = product.Id,
product.Name,
product.Price,
ReviewId = (int?)review.Id ?? 0,
Rating = (int?)review.Rating ?? 0,
Comment = review.Comment ?? "N/A"
});
🧠 چرا از RightJoin استفاده کنیم؟
وقتی گزارشهایت از جدول Reviews شروع میشن (و میخوای همهشون حفظ بشن)،
در عین حال میخوای Products مرتبط رو هم بیاری اگر وجود داشته باشن.
📊 SQL تولیدشده توسط EF Core:
SELECT
p."Id" AS "ProductId",
p."Name",
p."Price",
COALESCE(r."Id", 0) AS "ReviewId",
COALESCE(r."Rating", 0) AS "Rating",
COALESCE(r."Comment", 'N/A') AS "Comment"
FROM "Reviews" AS r
RIGHT JOIN "Products" AS p ON r."ProductId" = p."Id"
🧩 جمعبندی
به این فکر کن که چقدر left joinها در پروژههایت استفاده میشوند:
• نمایش تمام کاربران حتی اگر تنظیمات پروفایل نداشته باشند
• نمایش همهی محصولات حتی اگر هیچ Reviewای برایشان ثبت نشده باشد
• نمایش همهی سفارشها حتی اگر هنوز اطلاعات ارسال (Shipping Info) نداشته باشند
تقریباً همهجا باهاش سروکار داریم! 🚀
پیش از این، توسعهدهندهها گاهی برای دور زدن پیچیدگی GroupJoin و DefaultIfEmpty، دو Query جداگانه مینوشتند 😩
یا بدتر از آن، از Inner Join استفاده میکردند و دادههایی را از دست میدادند.
اما حالا دیگه هیچ بهانهای نیست ✨
LeftJoin و RightJoin
درست مثل هر متد LINQ دیگهای ساده و خوانا هستند.
⚙️ چند نکته سریع برای نوشتن Queryهای LINQ:
✅ در Projectionها، سمت Nullable را با ?? محافظت کن:
review.Comment ?? "N/A"
✅ Projection
ها را کوچک نگه دار تا دادههای اضافی از دیتابیس نخوانی.
✅ روی ستونهای Join (کلیدهای اتصال) ایندکس بگذار تا Query Plan بهینه شود.
💡 حالا با اضافه شدن LeftJoin و RightJoin،
کدی که مینویسی دقیقاً با مدل ذهنیات منطبق است — واضح، تمیز، و قابل نگهداری.
🔖هشتگها:
#EntityFrameworkCore #DotNet10 #EFCore #LINQ #LeftJoin #RightJoin