نظرات مطالب
آشنایی با Window Function ها در SQL Server بخش سوم
سلام،
این توابع واقعا کار رو آسون کردن، ما رو از بکارگیری چندین بار self join بی نیاز کردن.
بطور نمونه اگه بخواهیم مقدار SalesOrderDetailID سطر قبلی، دو سطرقبلی، سطربعدی و دو سطر بعدی را بدست بیاریم در نسخه 2008 ساده‌ترین و مناسب‌ترین کوئری این هست:

WITH cteLead
AS
(
SELECT SalesOrderID,SalesOrderDetailID,OrderQty,
       ROW_NUMBER() OVER (PARTITION BY SalesOrderID 
                          ORDER BY SalesOrderDetailID) AS sn
FROM TestLead_LAG
WHERE
SalesOrderID IN (43670, 43669, 43667, 43663)
)
SELECT m.SalesOrderID, m.SalesOrderDetailID, m.OrderQty,
       COALESCE(sLead1.SalesOrderDetailID, 0) as leadvalue1,
       COALESCE(sLead2.SalesOrderDetailID, 0) as leadvalue2,
       COALESCE(sLag1.SalesOrderDetailID, 0) as lagvalue2,
       COALESCE(sLag2.SalesOrderDetailID, 0) as lagvalue2
FROM cteLead AS m
LEFT OUTER JOIN cteLead AS sLead1
ON m.sn = sLead1.sn - 1
AND m.SalesOrderID = sLead1.SalesOrderID 
LEFT OUTER JOIN cteLead AS sLead2
ON m.sn = sLead2.sn - 2
AND m.SalesOrderID = sLead2.SalesOrderID 
LEFT OUTER JOIN cteLead AS sLag1
ON m.sn = sLag1.sn + 1
AND m.SalesOrderID = sLag1.SalesOrderID 
LEFT OUTER JOIN cteLead AS sLag2
ON m.sn = sLag2.sn + 2
AND m.SalesOrderID = sLag2.SalesOrderID 
ORDER BY m.SalesOrderID, m.SalesOrderDetailID, m.OrderQty;

در حالی که با دو تابعی که شما در اینجا پوشش دادین میشه کوئری فوق را فوق العاده ساده‌تر نمود:
SELECT s.SalesOrderID,s.SalesOrderDetailID,s.OrderQty,
       Lead(SalesOrderDetailID, 1, 0) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderDetailID) LeadValue1,
       LAG(SalesOrderDetailID, 1, 0) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderDetailID) LAGValue1,
       Lead(SalesOrderDetailID, 2, 0) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderDetailID) LeadValue2,
       LAG(SalesOrderDetailID, 2, 0) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderDetailID) LAGValue2,
FROM TestLead_LAG s
WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
ORDER BY s.SalesOrderID,s.SalesOrderDetailID,s.OrderQty


اشتراک‌ها
ویژگی های جدید Visual Studio 2017 15.8 Preview 3

Microsoft's release notes highlights for Preview 3 include:

  • Visual Studio now offers .NET Framework 4.7.2 development tools to supported platforms with 4.7.2 runtime included.
  • We improved performance during project unload/reload and branch switching.
  • With added support for Azure Functions, you now have a new target host in the Configure Continuous Delivery to Azure dialog.
  • Git and TFS status now updates properly for external file changes in .NET Core projects.
  • We added new productivity features, such as code cleanup, invert-if refactoring, Go to Enclosing Block, Multi-Caret support, and new keyboard profiles.
  • C++ enhancements include Template IntelliSense, convert macro to constexpr lightbulbs, and experimental in-editor code analysis squiggles.
  • You can now use cross-language debugging with Python 3.7.0rc1.
  • Performance Profiling now offers the ability to pause/resume data collection and adds a new .NET Object Allocation Tracking tool.
  • We included improvements for Android incremental builds in the Xamarinsupport for Xcode 9.4.
  •  
ویژگی های جدید Visual Studio 2017 15.8 Preview 3
نظرات مطالب
Minimal API's در دات نت 6 - قسمت ششم - غنی سازی اطلاعات Swagger
یک نکته‌ی تکمیلی: اضافه شدن پشتیبانی از IResult به ASP.NET Core MVC 7x

خروجی‌های اکشن متدهای MVC به همراه IActionResult و <ActionResult<T هستند و در minimal APIs که نمونه‌ای از آن‌را در این مطلب مشاهده کردید، از نوع IResult و <IValueHttpResult<TValue و ... این دو نباید با هم مخلوط شوند!
برای مثال اگر در ASP.NET Core MVC 6x چنین اکشن متدی را تهیه کنیم:
[HttpGet(Name = "GetWeatherForecast")]
public IResult Get()
{
    return Results.Ok(new { Name = "My name" });
}
بدون مشکل کامپایل می‌شود و ... کار هم می‌کند؛ اما با خروجی زیر:
{
  "value": {
    "name" : "My name"
  },
  "statusCode" : 200,
  "contentType" : null
}
به این معنا که MVC 6x، شیء از نوع IResult را به صورت متداولی serialize کرده و خروجی فوق را ارائه داده‌است.
این مشکل یا محدودیت در MVC 7x برطرف شده‌است و اکنون خروجی زیر را تولید می‌کند:
{
   "name" : "My name"
}
البته باید بخاطر داشت که با استفاده از IResult مخصوص minimal APIs در MVC 7x، یکسری از ویژگی‌های MVC مانند content negotiation و output formatters دیگر کار نخواهند کرد؛ یعنی همیشه خروجی را به صورت JSON دریافت می‌کنیم.
اشتراک‌ها
کتابخانه amplitudejs
A JavaScript library that allows you to control the design of your media controls in your webpage -- not the browser. No dependencies (jQuery not required) Demo
کتابخانه amplitudejs
اشتراک‌ها
قسمت آخر از سری مجموعه Concurrency و Asynchrony

Cancellation Token in C# - Part 7
در آخرین قسمت از این سری ویدیو‌ها در مورد کنسلیشن توکن صحبت کردیم و چرایی وجودش و اینکه این توکن رو چه کسی درست میکنه کی درست میکنه چطور مدیریت میکنه.

05:10 Scenario without cancellation token
13:40 What is the cancellation token source
14:53 Demo
18:00 Cancellation Exception
19:10 Review Code of Task Class
21:09 Demo on Asp dotnet core

مدت ویدیو : 27 دقیقه 

قسمت آخر از سری مجموعه Concurrency و Asynchrony