Notice: file_put_contents(): Write of 1917 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 20480 of 22397 bytes written, possibly out of free disk space 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 imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. Today, we will address Telegram channels and how to use them for maximum benefit. Public channels are public to the internet, regardless of whether or not they are subscribed. A public channel is displayed in search results and has a short address (link). It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS): How to Create a Private or Public Channel on Telegram?
from us


Telegram DotNet | دات نت
FROM American