Column در اسمبلی EntityFramework.dll تعریف شده؛ هرچند فضای نام آن در اصل متعلق به اسمبلی EF نیست.
مقدمه و شرح مساله
توسط ویژگیهای جدیدی که در نسخه 2012 به بحث window افزوده شد میتوانیم مسالهای running total و running average را به شکل بهینه ای حل کنیم.
ابتدا این دو مساله را بدون بکارگیری ویژگیهای جدید، حل نموده و سپس سراغ توابع جدید خواهم رفت.
قبل از هر چیزی لازم است جدول زیر ساخته شود و دادههای نمونه در آن درج شود:
مساله running total بسیار ساده است، یعنی جمع مقدار سطر جاری با مقادیر سطرهای قبلی (بر اساس یک ترتیب معین)
running average هم مشابه به running total هست با این تفاوت که میانگین مقادیر سطرجاری وسطرهای قبلی محاسبه میشود.
و نتیجه به صورت نمودار:
راه حل در SQL Server 2000
توسط دو correlated scalar subquery در ماده SELECT میتوانیم مقادیر دو ستون مورد نظر با محاسبه کنیم:
اگر به نقشه اجرای این query نگاه کنید گره(عملگر) inner join دو بار بکار رفته است (به وجود دو subquery)، که این عدد در روش توابع تجمعی window به صفر کاهش پیدا خواهد کرد
راه حل در SQL Server 2005
توسط cross apply به سادگی میتوانیم دو subquery که در روش قبل بود را به یکی کاهش دهیم:
این بار تنها یک عملگر inner join در نقشه اجرای query مشاهده میشود:
راه حل در SQL Server 2012
با اضافه شدن برخی از ویژگیهای استاندارد به ماده OVER مثل rows و range شاهد بهبودی در عملکرد queryها هستیم.
یکی از کاربردهای توابع تجمعی window حل مساله running total و running average است.
به تصویر زیر توجه کنید، همانطور که در قبل توضیح دادم ما به سطرجاری و سطرهای پیشین نیاز داریم تا اعمال تجمعی (جمع و میانگین) را روی مقادیر بدست آمده انجام دهیم. در تصویر زیر سطرجاری و سطرهای قبلی به ازای هر سطری به وضوح قابل مشاهده است، مثلا هنگامی که سطر جاری برابر با روز 30 است ما خود سطر جاری (current row) و تمام سطرهای پیشین و قبلی (unbounded preceding) را نیاز داریم.
و اکنون query مورد نظر
در نقشه اجرای این query دیگر خبری از عملگر inner join نخواهد بود که به معنای عملکرد بهتر query است.
توسط ویژگیهای جدیدی که در نسخه 2012 به بحث window افزوده شد میتوانیم مسالهای running total و running average را به شکل بهینه ای حل کنیم.
ابتدا این دو مساله را بدون بکارگیری ویژگیهای جدید، حل نموده و سپس سراغ توابع جدید خواهم رفت.
قبل از هر چیزی لازم است جدول زیر ساخته شود و دادههای نمونه در آن درج شود:
create table testTable ( day_nbr integer not null primary key clustered, value integer not null check (value > 0) ); insert into testTable values (10, 7), (20, 15), (30, 3), (40, 9), (50, 17), (60, 25), (70, 10);
مساله running total بسیار ساده است، یعنی جمع مقدار سطر جاری با مقادیر سطرهای قبلی (بر اساس یک ترتیب معین)
running average هم مشابه به running total هست با این تفاوت که میانگین مقادیر سطرجاری وسطرهای قبلی محاسبه میشود.
و نتیجه به صورت نمودار:
راه حل در SQL Server 2000
توسط دو correlated scalar subquery در ماده SELECT میتوانیم مقادیر دو ستون مورد نظر با محاسبه کنیم:
select *, runningTotal = (select sum(value) from testTable where day_nbr <= t.day_nbr), runningAverage = (select avg(value) from testTable where day_nbr <= t.day_nbr) from testTable t;
اگر به نقشه اجرای این query نگاه کنید گره(عملگر) inner join دو بار بکار رفته است (به وجود دو subquery)، که این عدد در روش توابع تجمعی window به صفر کاهش پیدا خواهد کرد
راه حل در SQL Server 2005
توسط cross apply به سادگی میتوانیم دو subquery که در روش قبل بود را به یکی کاهش دهیم:
select * from testTable t cross apply (select sum(value) as runningTotal, avg(value) as runningAverage from testTable where day_nbr <= t.day_nbr)d;
این بار تنها یک عملگر inner join در نقشه اجرای query مشاهده میشود:
راه حل در SQL Server 2012
با اضافه شدن برخی از ویژگیهای استاندارد به ماده OVER مثل rows و range شاهد بهبودی در عملکرد queryها هستیم.
یکی از کاربردهای توابع تجمعی window حل مساله running total و running average است.
به تصویر زیر توجه کنید، همانطور که در قبل توضیح دادم ما به سطرجاری و سطرهای پیشین نیاز داریم تا اعمال تجمعی (جمع و میانگین) را روی مقادیر بدست آمده انجام دهیم. در تصویر زیر سطرجاری و سطرهای قبلی به ازای هر سطری به وضوح قابل مشاهده است، مثلا هنگامی که سطر جاری برابر با روز 30 است ما خود سطر جاری (current row) و تمام سطرهای پیشین و قبلی (unbounded preceding) را نیاز داریم.
و اکنون query مورد نظر
select *, sum(value) over(order by day_nbr rows between unbounded preceding and current row) as runningTotal, avg(value) over(order by day_nbr rows between unbounded preceding and current row) as runningAverage from testTable
در نقشه اجرای این query دیگر خبری از عملگر inner join نخواهد بود که به معنای عملکرد بهتر query است.
اشتراکها
راهنمای طراحی پیامهای خطای مناسب
اشتراکها
تغییرات ASP.NET Core در NET 7 RC 2.
اشتراکها
خلاصه ng-conf 2017
نسخه رسمی و به روز شده «وضعیت فناوریهای مرتبط با دات نت از دیدگاه مرگ و زندگی!» از طرف مایکروسافت:
Summary - .NET Technology Guide for Business Applications
The .NET Technology Guide for Business Applications
Summary - .NET Technology Guide for Business Applications
The .NET Technology Guide for Business Applications
در مورد «درست کردن فایل راهنمای CHM از توضیحات XML یک پروژه» پیشتر مطلبی در این سایت منتشر شده است. تمام اینها هم خوب! اما فایل راهنمای نهایی تولیدی یک ایراد مهم دارد. Sandcastle Help File Builder نیاز دارد که به ازای هر فضای نامی که در پروژهی شما وجود دارد، یک summary و توضیح هم ارائه شود؛ در غیر اینصورت خطای قرمز رنگ زیر را در ابتدای صفحه معرفی کلاسهای یک فضای نام، نمایش خواهند داد:
[Missing <summary> documentation for "N:Some.Test"]
از آنطرف کامپایلرهای مورد استفاده چنین توضیحاتی را قبول ندارند و نمیتوان برای فضاهای نام، توضیحاتی را همانند کلاسها یا متدها، ارائه داد. برای حل این مشکل، یک راه حل ساده وجود دارد: به ازای هر فضای نامی که در پروژه وجود دارد، یک کلاس خالی را به نام "NamespaceDoc" به پروژه اضافه کنید. مثلا:
namespace Some.Test
{
/// <summary>
/// The <see cref="Some.Test"/> namespace contains classes for ....
/// </summary>
[System.Runtime.CompilerServices.CompilerGenerated]
class NamespaceDoc
{
}
}
به این ترتیب توضیحاتی که ملاحظه میکنید توسط Sandcastle Help File Builder مورد استفاده قرار خواهد گرفت و آن اخطارهای قرمز رنگ عدم وجود توضیحات مرتبط با فضاهای نام، از فایل تولیدی نهایی حذف خواهند شد.
روش دوم:
در خود برنامه Sandcastle Help File Builder، در قسمت Project Properties > Comments > NameSpaceSummaries، امکان وارد کردن توضیحات فضاهای نام نیز وجود دارد. (که آنچنان جالب نیست؛ بهتر است همه چیز یکپارچه باشد.)
پاسخ به بازخوردهای پروژهها
چند راهنمایی در مورد گروه بندی
با سلام دوباره
با استفاده از CustomAggregateFunction و معرفی متغییر عمومی سراسری و پر کردن اون از گزارش در ستونهای دیگه تونستم خروجی مورد نظرم رو بگیرم.
واجب بود از شما تشکر ویژه کنم برای زحمات شما.
به ایده هم دارم البته اگر قابل اجرا باشه که برای سطر summary امکان Merge کردن ستونها رو بگذارید.
کمال تشکر رو از شما دارم.
پیروز و شاد و سربلند باشید.