Warning: mkdir(): No space left on device in /var/www/tgoop/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/dotnetcode/--): Failed to open stream: No such file or directory in /var/www/tgoop/post.php on line 50
DotNet | دات نت@dotnetcode P.3074
DOTNETCODE Telegram 3074
DotNet | دات نت
قسمت شماره ۱: خداحافظی با کدهای تکراری در C# 14! سلام به همه برنامه‌نویس‌های خفن دات‌نتی! 👋 خبرهای داغ داریم! 🔥 .NET 10 و C# 14 با یه سری ویژگی‌های فوق‌العاده از راه رسیدن که کدنویسی رو خیلی شیرین‌تر می‌کنه. بیاید چندتا از باحال‌ترین‌هاش رو با هم ببینیم:…
قسمت ۱ :Extension Members

این یکی از بزرگترین تغییرات C# 14 هست! یادتونه با Extension Methods می‌تونستیم به کلاس‌های دیگه (حتی کلاس‌هایی که سورس‌شون رو نداشتیم) رفتار (متد) اضافه کنیم؟

حالا با Extension Members می‌تونیم بهشون حالت (State) هم اضافه کنیم! یعنی می‌تونیم به کلاسی که مال ما نیست، Property، Field و حتی Event اضافه کنیم.

مثال: فرض کنید یه کلاس User از یه پکیج NuGet دارید و نمی‌تونید تغییرش بدید.
// این کلاس در یک لایبرری دیگه است:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

حالا می‌خوایم یه Property به اسم DisplayName بهش اضافه کنیم که اسم کامل رو برگردونه:
// جادوی C# 14 با کلمه کلیدی 'extension'
public extension class UserExtension for User
{
// یه Property جدید به کلاس User اضافه کردیم!
public string DisplayName
{
// 'this' به همون نمونه 'User' اشاره داره
get => $"{this.FirstName} {this.LastName}";
}

// حتی می‌تونیم فیلد هم اضافه کنیم!
private bool _hasBeenWelcomed = false;

public void Welcome()
{
if (!_hasBeenWelcomed)
{
Console.WriteLine($"خوش اومدی، {this.DisplayName}!");
_hasBeenWelcomed = true;
}
}
}

نحوه استفاده‌اش دقیقاً مثل یه Property عادیه:
var user = new User { FirstName = "سارا", LastName = "رضائی" };

// مستقیم به Property الحاقی دسترسی داریم:
Console.WriteLine(user.DisplayName); // خروجی: سارا محمدی

user.Welcome(); // خروجی: خوش اومدی، سارا محمدی!
user.Welcome(); // (بار دوم چیزی چاپ نمی‌کنه)

قسمت ۲ : خداحافظی با پیچیدگی LeftJoin

اگه با Entity Framework Core کار کرده باشید، می‌دونید که پیاده‌سازی یه LEFT JOIN ساده (یعنی «همه کاربرها رو بیار، و اگه کتابی داشتن، کتاب‌هاشون رو هم بیار») چقدر می‌تونست پیچیده باشه. معمولاً باید از GroupJoin و SelectMany و DefaultIfEmpty استفاده می‌کردیم که خیلی خوانا نبود.

خبر خوب: در EF Core 10، متدهای LeftJoin و RightJoin مستقیماً اضافه شدن!

مثال: می‌خوایم لیست همه «نویسنده‌ها» و «عنوان کتاب‌هاشون» رو بگیریم، حتی اگه نویسنده‌ای هیچ کتابی نداشته باشه.
// ----------------
// روش قدیمی در EF Core 8:
// ----------------
var oldWay = db.Authors
.GroupJoin(db.Books,
author => author.Id,
book => book.AuthorId,
(author, books) => new { Author = author, Books = books })
.SelectMany(
temp => temp.Books.DefaultIfEmpty(),
(temp, book) => new
{
AuthorName = temp.Author.Name,
BookTitle = book == null ? "(بدون کتاب)" : book.Title
});

// ----------------
// روش جدید و خوانا در EF Core 10:
// ----------------
var newWay = db.Authors
.LeftJoin(db.Books,
author => author.Id, // کلید از جدول چپ (Author)
book => book.AuthorId, // کلید از جدول راست (Book)
(author, book) => new // نتیجه نهایی
{
AuthorName = author.Name,
// اگه کتابی نباشه، 'book' و در نتیجه 'book.Title' نال می‌شه
BookTitle = book.Title
});

این کوئری جدید خیلی تمیزتره و دقیقاً همون چیزی رو می‌نویسید که تو ذهنتونه (و شبیه SQL اصلیه).

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍1🔥1👏1



tgoop.com/dotnetcode/3074
Create:
Last Update:

قسمت ۱ :Extension Members

این یکی از بزرگترین تغییرات C# 14 هست! یادتونه با Extension Methods می‌تونستیم به کلاس‌های دیگه (حتی کلاس‌هایی که سورس‌شون رو نداشتیم) رفتار (متد) اضافه کنیم؟

حالا با Extension Members می‌تونیم بهشون حالت (State) هم اضافه کنیم! یعنی می‌تونیم به کلاسی که مال ما نیست، Property، Field و حتی Event اضافه کنیم.

مثال: فرض کنید یه کلاس User از یه پکیج NuGet دارید و نمی‌تونید تغییرش بدید.

// این کلاس در یک لایبرری دیگه است:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

حالا می‌خوایم یه Property به اسم DisplayName بهش اضافه کنیم که اسم کامل رو برگردونه:
// جادوی C# 14 با کلمه کلیدی 'extension'
public extension class UserExtension for User
{
// یه Property جدید به کلاس User اضافه کردیم!
public string DisplayName
{
// 'this' به همون نمونه 'User' اشاره داره
get => $"{this.FirstName} {this.LastName}";
}

// حتی می‌تونیم فیلد هم اضافه کنیم!
private bool _hasBeenWelcomed = false;

public void Welcome()
{
if (!_hasBeenWelcomed)
{
Console.WriteLine($"خوش اومدی، {this.DisplayName}!");
_hasBeenWelcomed = true;
}
}
}

نحوه استفاده‌اش دقیقاً مثل یه Property عادیه:
var user = new User { FirstName = "سارا", LastName = "رضائی" };

// مستقیم به Property الحاقی دسترسی داریم:
Console.WriteLine(user.DisplayName); // خروجی: سارا محمدی

user.Welcome(); // خروجی: خوش اومدی، سارا محمدی!
user.Welcome(); // (بار دوم چیزی چاپ نمی‌کنه)

قسمت ۲ : خداحافظی با پیچیدگی LeftJoin

اگه با Entity Framework Core کار کرده باشید، می‌دونید که پیاده‌سازی یه LEFT JOIN ساده (یعنی «همه کاربرها رو بیار، و اگه کتابی داشتن، کتاب‌هاشون رو هم بیار») چقدر می‌تونست پیچیده باشه. معمولاً باید از GroupJoin و SelectMany و DefaultIfEmpty استفاده می‌کردیم که خیلی خوانا نبود.

خبر خوب: در EF Core 10، متدهای LeftJoin و RightJoin مستقیماً اضافه شدن!

مثال: می‌خوایم لیست همه «نویسنده‌ها» و «عنوان کتاب‌هاشون» رو بگیریم، حتی اگه نویسنده‌ای هیچ کتابی نداشته باشه.
// ----------------
// روش قدیمی در EF Core 8:
// ----------------
var oldWay = db.Authors
.GroupJoin(db.Books,
author => author.Id,
book => book.AuthorId,
(author, books) => new { Author = author, Books = books })
.SelectMany(
temp => temp.Books.DefaultIfEmpty(),
(temp, book) => new
{
AuthorName = temp.Author.Name,
BookTitle = book == null ? "(بدون کتاب)" : book.Title
});

// ----------------
// روش جدید و خوانا در EF Core 10:
// ----------------
var newWay = db.Authors
.LeftJoin(db.Books,
author => author.Id, // کلید از جدول چپ (Author)
book => book.AuthorId, // کلید از جدول راست (Book)
(author, book) => new // نتیجه نهایی
{
AuthorName = author.Name,
// اگه کتابی نباشه، 'book' و در نتیجه 'book.Title' نال می‌شه
BookTitle = book.Title
});

این کوئری جدید خیلی تمیزتره و دقیقاً همون چیزی رو می‌نویسید که تو ذهنتونه (و شبیه SQL اصلیه).

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻

BY DotNet | دات نت




Share with your friend now:
tgoop.com/dotnetcode/3074

View MORE
Open in Telegram


Telegram News

Date: |

The administrator of a telegram group, "Suck Channel," was sentenced to six years and six months in prison for seven counts of incitement yesterday. Activate up to 20 bots The Channel name and bio must be no more than 255 characters long While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. fire bomb molotov November 18 Dylan Hollingsworth yau ma tei
from sg


Telegram DotNet | دات نت
FROM Singapore