FULLSTACKDEVS Telegram 591
#LINQ


❇️ 5 usefull tips to write cleaner LINQ code

🔹در این پست قصد داریم چند توصیه در هنگام نوشتن کوئری های Linq به شما دهیم که باعث خوانا تر شدن کوئری ها میشود.

🔸کوئری های linq علاوه بر ساده بودن زیبایی خاصی نیز دارند و بدون شک در صورتی که به درستی نوشته شود پرفورمنس بالایی هم دارند.
برای پرهیز کردن از اشتباهات احتمالی در هنگام نوشتن کوئری های linq باید قوانینی را برای خود مشخص کنید و بدین ترتیب بروز باگ و خطاهای احتمالی کاهش میابد.

در ادامه پنج نوع از این قوانین را معرفی میکنیم.
1️⃣ Two chained methods

هنگامی که کوئری ای مینویسید که فقط دارای دو Linq متد است و کوئری تان به یک eager linq متد ختم می شود. میتوانید کل کوئری خود را در یک خط قرار دهید.
var userList = GetDataSource().Where(p => p.Email.Contains("@foo.com")).ToList();

در غیر اینصورت کوئری خود را در چند خط بنویسید.
var userList = GetDataSource()
.Where(p => p.Email.Contains("@foo.com"))
.Select(s => s.Email);

▫️اگه در مورد eager linq متدها اطلاعاتی محدودی دارید این مقاله را مطالعه نمایید.

2️⃣ اگر کوئری تان بیش از دو متد دارد باز هم هر متد را در خط جدیدی قرار دهید.

3️⃣ Don’t iterate IQueryable<T> by using keyword foreach.

🔹در
این قانون شما را با اصلی آشنا میکنیم با عنوان
💎 “explicit is better than implicit”.

🔸در
هنگام بررسی کدها و حتی خواندن کدهای دیگران اگر جایی از کد بروی یک IQuerable حلقه زده باشید(به وسیله foreach), خوانایی و درک کد کاهش میابد (البته این یک نظر شخصی است) . همچنین ممکن است کسی که کدتان را میخواند این مسئله را فراموش کرده باشد یا نداند که در foreach باعث اجرا شدن این کوئری میشود.
روش بهتر این است که ابتدا کوئری را اجرا کرده و سپس بروی آن حلقه بزنید.

var usersEmailList = GetDataSource()
.Where(p => p.Email.Contains("@foo.com"))
.Select(user => user.Email);
.ToList();

foreach (var user in usersEmailList)
{
...
}

4️⃣ Long Lambda statement is not okay.

🔸از
طولانی و بزرگ شدن بدنه lambda های درون کوئری تا حد ممکن بپرهیزید در برخی موارد اگر lambda ای چند خط به عنوان بدنه داشته باشد باعث خوانایی کد میشود اما در اکثر مواقع از خوانایی کوئری می کاهد.

someQuery.Select(p => {
var newUser = new User
{
Name = p.Name,
Age = p.Age
}
});

5️⃣ Entity Framework

🔸در
هنگام کار کردن با EF از این دست قبیل قوانین که غالبا شخصی هستند بسیار وجود دارد به عنوان مثال
فرض کنید نیاز به نوشتن linq کوئری داریم که براساس شروطی, داده هایی رو از دیتابیس واکشی کند و در قسمتی دیگری از کد بروی داده های واکشی شده کارهای دیگری انجام دهیم.(فرایند اجرا شدن این کارها در حافظه انجام میشود و قابل ترجمه به کوئری sql نیستند)

▫️روش اشتباه نوشتن این کوئری بدین صورت است

var usersEmailList = GetSomeDbSet()
.Where(p => p.Email.Contains("@foo.com"))
.Select(user => user.Email)
.ToList()
.Select(SomeTransoformationInMemory);


🔸 بدین منظور باید کوئری خود را به دو بخش تقسیم کرده و عملیاتی را که قابل ترجمه هستند را ابتدا در کوئری که به سمت دیتابیس ارسال میشود, اجرا کنند و بقیه عملیات را بروی داده های واکشی شده انجام دهید.

var usersEmailListFromDB = GetSomeDbSet()
.Where(p => p.Email.Contains("@foo.com"))
.Select(user => user.Email)
.ToList();

var usersEmailList = usersEmailListFromDB.Select(SomeTransoformationInMemory).ToList();

@fullStackDevs



tgoop.com/fullStackDevs/591
Create:
Last Update:

#LINQ


❇️ 5 usefull tips to write cleaner LINQ code

🔹در این پست قصد داریم چند توصیه در هنگام نوشتن کوئری های Linq به شما دهیم که باعث خوانا تر شدن کوئری ها میشود.

🔸کوئری های linq علاوه بر ساده بودن زیبایی خاصی نیز دارند و بدون شک در صورتی که به درستی نوشته شود پرفورمنس بالایی هم دارند.
برای پرهیز کردن از اشتباهات احتمالی در هنگام نوشتن کوئری های linq باید قوانینی را برای خود مشخص کنید و بدین ترتیب بروز باگ و خطاهای احتمالی کاهش میابد.

در ادامه پنج نوع از این قوانین را معرفی میکنیم.
1️⃣ Two chained methods

هنگامی که کوئری ای مینویسید که فقط دارای دو Linq متد است و کوئری تان به یک eager linq متد ختم می شود. میتوانید کل کوئری خود را در یک خط قرار دهید.

var userList = GetDataSource().Where(p => p.Email.Contains("@foo.com")).ToList();

در غیر اینصورت کوئری خود را در چند خط بنویسید.
var userList = GetDataSource()
.Where(p => p.Email.Contains("@foo.com"))
.Select(s => s.Email);

▫️اگه در مورد eager linq متدها اطلاعاتی محدودی دارید این مقاله را مطالعه نمایید.

2️⃣ اگر کوئری تان بیش از دو متد دارد باز هم هر متد را در خط جدیدی قرار دهید.

3️⃣ Don’t iterate IQueryable<T> by using keyword foreach.

🔹در
این قانون شما را با اصلی آشنا میکنیم با عنوان
💎 “explicit is better than implicit”.

🔸در
هنگام بررسی کدها و حتی خواندن کدهای دیگران اگر جایی از کد بروی یک IQuerable حلقه زده باشید(به وسیله foreach), خوانایی و درک کد کاهش میابد (البته این یک نظر شخصی است) . همچنین ممکن است کسی که کدتان را میخواند این مسئله را فراموش کرده باشد یا نداند که در foreach باعث اجرا شدن این کوئری میشود.
روش بهتر این است که ابتدا کوئری را اجرا کرده و سپس بروی آن حلقه بزنید.

var usersEmailList = GetDataSource()
.Where(p => p.Email.Contains("@foo.com"))
.Select(user => user.Email);
.ToList();

foreach (var user in usersEmailList)
{
...
}

4️⃣ Long Lambda statement is not okay.

🔸از
طولانی و بزرگ شدن بدنه lambda های درون کوئری تا حد ممکن بپرهیزید در برخی موارد اگر lambda ای چند خط به عنوان بدنه داشته باشد باعث خوانایی کد میشود اما در اکثر مواقع از خوانایی کوئری می کاهد.

someQuery.Select(p => {
var newUser = new User
{
Name = p.Name,
Age = p.Age
}
});

5️⃣ Entity Framework

🔸در
هنگام کار کردن با EF از این دست قبیل قوانین که غالبا شخصی هستند بسیار وجود دارد به عنوان مثال
فرض کنید نیاز به نوشتن linq کوئری داریم که براساس شروطی, داده هایی رو از دیتابیس واکشی کند و در قسمتی دیگری از کد بروی داده های واکشی شده کارهای دیگری انجام دهیم.(فرایند اجرا شدن این کارها در حافظه انجام میشود و قابل ترجمه به کوئری sql نیستند)

▫️روش اشتباه نوشتن این کوئری بدین صورت است

var usersEmailList = GetSomeDbSet()
.Where(p => p.Email.Contains("@foo.com"))
.Select(user => user.Email)
.ToList()
.Select(SomeTransoformationInMemory);


🔸 بدین منظور باید کوئری خود را به دو بخش تقسیم کرده و عملیاتی را که قابل ترجمه هستند را ابتدا در کوئری که به سمت دیتابیس ارسال میشود, اجرا کنند و بقیه عملیات را بروی داده های واکشی شده انجام دهید.

var usersEmailListFromDB = GetSomeDbSet()
.Where(p => p.Email.Contains("@foo.com"))
.Select(user => user.Email)
.ToList();

var usersEmailList = usersEmailListFromDB.Select(SomeTransoformationInMemory).ToList();

@fullStackDevs

BY Web Devs




Share with your friend now:
tgoop.com/fullStackDevs/591

View MORE
Open in Telegram


Telegram News

Date: |

In the “Bear Market Screaming Therapy Group” on Telegram, members are only allowed to post voice notes of themselves screaming. Anything else will result in an instant ban from the group, which currently has about 75 members. The best encrypted messaging apps Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021. Today, we will address Telegram channels and how to use them for maximum benefit. Polls
from us


Telegram Web Devs
FROM American