2010/11/13

نحوه‌ي صحيح فراخواني SQL Aggregate Functions حين استفاده از LINQ - قسمت دوم


در قسمت قبل در مورد حالتي كه كوئري انجام شده نتيجه‌اي را بر نگردانده است، بحث شد. در اين قسمت يكي از شايع‌ترين مشكلات حين كار با تابع Sum بررسي خواهد شد.

ابتدا جدول ساده Transactions را با دو فيلد Id و Amount مطابق تصوير زير در نظر بگيريد:


تعدادي ركورد در اين جدول ثبت شده‌اند. اكنون مي‌خواهيم جمع آن‌ها را محاسبه كنيم:


همانطور كه ملاحظه مي‌نمائيد اين عمليات ميسر نيست، زيرا حاصل نهايي فراتر از بازه‌ي تعريف شده‌ي Int32 است.
براي رفع اين مشكل بايد Amount را تبديل به BigInt (براي مثال مرتبط با نگارش‌هاي مختلف SQL Server) كرد. مطابق توضيحات قسمت قبل، اين عمليات casting بايد به lambda expression تعريف شده اعمال گردد، زيرا خروجي Sum بر مبناي آن تعيين مي‌گردد.



در اين حالت خروجي SQL آن نيز به صورت زير در خواهد آمد:



هر چند اين مباحث ساده به نظر مي‌رسند ولي در صورت عدم رعايت سبب سرخ و سفيد شدن در هنگام مقتضي خواهند گرديد.

4 نظرات:

  1. با سلام
    مطالب مختصر و مفید بود
    امیدورام به همین روند ادامه بدین
    راستی آقای نصیری یه توضیح کوچولو در مورد Linqpad میدین .
    با تشکر

    پاسخحذف
  2. LINQPad يك برنامه‌ي نيمه رايگان است. به اين معنا كه دريافت آن رايگان است، استفاده از آن هيچ محدوديتي ندارد. فقط هنگام نوشتن كوئري‌ها intellisense ظاهر نخواهد شد. اين يك مورد رايگان نيست و براي فعال شدن آن بايد مقداري هزينه كنيد. كيفيت intellisense آن هم قابل مقايسه است با VS.NET و بسيار مطلوب است.
    LINQPad براي تست كردن سريع عبارات LINQ فوق العاده است. با استفاده از آن بدون نياز به VS.NET خيلي سريع و در عرض چند ثانيه مي‌تونيد عبارات LINQ خودتون رو نوشته و تست كنيد. اين LINQ مي‌تونه LINQ to Objects باشه يا LINQ to SQL يا LINQ to Entities و غيره.
    خلاصه چيزي شبيه به management studio مخصوص SQL Server را تصور كنيد كه اينبار بجاي SQL نويسي، LINQ مي‌نويسيد، حاصل را نمايش مي‌دهد؛ علاوه بر آن خروجي SQL توليدي و حتي IL نهايي را هم نمايش مي‌دهد كه براي ديباگ بسيار مفيد است.
    به همراه آن يك سري مثال هم وجود دارد كه جهت فراگيري LINQ يا حتي استفاده از آن‌ها به عنوان مرجع بي‌نظير است.

    پاسخحذف
  3. تصاویر ( کدهای ) این مطلب دیده نمی شود ، لطفا اصلاح بفرمایید ، ممنون

    پاسخحذف
  4. لطفا فايل خلاصه وبلاگ را از سمت راست، بالاي سايت، قسمت گزيده‌ها دريافت كنيد. تمام تصاوير در آن موجود است

    پاسخحذف