۱۳۸۹/۰۸/۲۲

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


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

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


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


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



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



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