تهیه گزارشات Crosstab به کمک LINQ
در گزارشات Crosstab، ردیف‌های یک گزارش، تبدیل به ستون‌های آن می‌شوند؛ به همین جهت به آن‌ها Pivot tables هم می‌گویند.برای مثال فرض کنید که قصد دارید گزارش تعداد ساعت کارکرد را به ازای هر پروژه در طول چند ماه تعیین کنید. گزارش متداول از این نوع اطلاعات، یک لیست بلند بالای بی‌مفهوم است. این گزارش تشکیل شده از صدها رکورد به ازای کارکنان مختلف در پروژه‌های مختلف و ... هیچ ارزش آماری خاصی ندارد. یک گزارش بدوی است. زمانیکه این گزارش را تبدیل به ح ...
نحوه‌ی صحیح فراخوانی SQL Aggregate Functions حین استفاده از LINQ - قسمت دوم
در قسمت قبل در مورد حالتی که کوئری انجام شده نتیجه‌ای را بر نگردانده است، بحث شد. در این قسمت یکی از شایع‌ترین مشکلات حین کار با تابع Sum بررسی خواهد شد.ابتدا جدول ساده Transactions را با دو فیلد Id و Amount مطابق تصویر زیر در نظر بگیرید:تعدادی رکورد در این جدول ثبت شده‌اند. اکنون می‌خواهیم جمع آن‌ها را محاسبه کنیم:همانطور که ملاحظه می‌نمائید این عملیات میسر نیست، زیرا حاصل نهایی فراتر از بازه‌ی تعریف شده‌ی Int32 است.برای رفع این مشکل باید ...
نحوه‌ی صحیح فراخوانی SQL Aggregate Functions حین استفاده از LINQ
SQL Aggregate Functions که مد نظر شما هستند مانند Min ، Max ، Sum و امثال آن. بحث LINQ هم زمانیکه از الگوی Repository استفاده شود مستقل از نوع ORM مورد نظر خواهد شد؛ بنابراین در اینجا مقصود از LINQ می‌تواند LINQ to SQL ، LINQ to Entities ، LINQ to NHibernate و کلا هر نوع ORM دیگری با پشتیبانی از LINQ باشد.صورت مساله هم این است: آیا نوشتن عبارت LINQ ایی به شکل زیر صحیح است؟decimal amount = respository.Transactions ...
تفاوت بین IQueryable و IEnumerable در حین کار با ORMs
متد زیر را که یکی از اشتباهات رایج حین استفاده از LINQ خصوصا جهت Binding اطلاعات است، در نظر بگیرید:IQueryable<Customer> GetCustomers()این متد در حقیقت هیچ چیزی را Get نمی‌کند! نام اصلی آن GetQueryableCustomers و یا GetQueryObjectForCustomersاست.IQueryable قلب LINQ است و تنها بیانگر یک عبارت (expression) از رکوردهایی می‌باشد که مد نظر شما است و نه بیشتر.IQueryable<Customer> youngCustomers = repo.GetCustomers().Where(m => m ...
Count یا Any
با وجود امکانات مهیای توسط LINQ ، یک سری از عادات متداول حین کار با گروهی از اشیاء باید کنار گذاشته شوند؛ برای مثال چگونگی بررسی این مطلب که آیا شیء IEnumerable ما حاوی عنصری هست یا خیر.روش متداول انجام اینکار استفاده از متد Count است. چون این متد پیش از تدارک امکانات LINQ نیز وجود داشته، بنابراین اولین موردی که جهت بررسی آن به ذهن خطور می‌کند، استفاده از متد Count می‌باشد؛ برای مثال:void Method(IEnumerable<Status> statuses){ if (st ...
Fluent Linq to Sql
نگارش بعدی یا چهارم entity framework چیزی است شبیه به Fluent NHibernate . یعنی اگر مقاله‌ای را در این زمینه مطالعه کنید و عنوان آن حذف شود، نمی‌توان تشخیص داد که این مقاله مربوط به entity framework است یا Fluent NHibernate. هر چند entity framework حداقل دو نگارش دیگر لازم دارد تا NHibernate را کاملا پشت سر بگذارد.از آن طرف محبوبیت Linq to SQL هم هنوز پابرجا است و برای مثال سایت پر ترافیکی مثل stack overflow از آن استفاده می‌کند و بسیار هم ...
پردازش موازی در VS2010
دموی نسبتا مفصلی از توانایی‌های دات نت فریم ورک 4 و VS2010 را که توسط تیم مربوطه در مورد پردازش موازی تهیه شده است، از آدرس زیر می‌توانید دریافت نمائید.Toub_ParallelismTour_Oct2009.pptx
پیدا کردن آیتم‌های تکراری در یک لیست به کمک LINQ
گاهی از اوقات نیاز می‌شود تا در یک لیست، آیتم‌های تکراری موجود را مشخص کرد. به صورت پیش فرض متد Distinct برای حذف مقادیر تکراری در یک لیست با استفاده از LINQ موجود است که البته آن‌هم اما و اگرهایی دارد که در ادامه به آن پرداخته خواهد شد، اما باز هم این مورد پاسخ سؤال اصلی نیست (نمی‌خواهیم موارد تکراری را حذف کنیم).برای حذف آیتم‌های تکراری از یک لیست جنریک می‌توان متد زیر را نوشت:public static List<T> RemoveDuplicates<T>(List< ...
استفاده از LINQ جهت تهیه کدهایی کوتاه‌تر و خواناتر
با کمک امکانات ارائه شده توسط LINQ ، می‌توان بسیاری از اعمال برنامه نویسی را در حجمی کمتر، خواناتر و در نتیجه با قابلیت نگهداری بهتر، انجام داد که تعدادی از آن‌ها را در ادامه مرور خواهیم کرد.الف) تهیه یک یک رشته، حاوی عناصر یک آرایه، جدا شده با کاما.using System.Linq;public class CLinq{ public static string GetCommaSeparatedListNormal(string[] data) { string items = string.Empty; foreach (var item in data) { items += it ...
استثنای Sequence contains no elements در حین استفاده از LINQ
در ابتدا مثال‌های زیر را در نظر بگیرید:using System;using System.Collections.Generic;using System.Linq;namespace testWinForms87{ public class Data { public int id { get; set; } public string name { get; set; } } class CLinqTests { public static int TestGetListMin1() { var lst = new List<Data> { new Data{ id=1, name="id1"}, new Data{ id=2, name="id2"}, ...