در گزارشات Crosstab، ردیفهای یک گزارش، تبدیل به ستونهای آن میشوند؛ به همین جهت به آنها Pivot tables هم میگویند.برای مثال فرض کنید که قصد دارید گزارش تعداد ساعت کارکرد را به ازای هر پروژه در طول چند ماه تعیین کنید. گزارش متداول از این نوع اطلاعات، یک لیست بلند بالای بیمفهوم است. این گزارش تشکیل شده از صدها رکورد به ازای کارکنان مختلف در پروژههای مختلف و ... هیچ ارزش آماری خاصی ندارد. یک گزارش بدوی است. زمانیکه این گزارش را تبدیل به ح ...
در قسمت قبل در مورد حالتی که کوئری انجام شده نتیجهای را بر نگردانده است، بحث شد. در این قسمت یکی از شایعترین مشکلات حین کار با تابع Sum بررسی خواهد شد.ابتدا جدول ساده Transactions را با دو فیلد Id و Amount مطابق تصویر زیر در نظر بگیرید:تعدادی رکورد در این جدول ثبت شدهاند. اکنون میخواهیم جمع آنها را محاسبه کنیم:همانطور که ملاحظه مینمائید این عملیات میسر نیست، زیرا حاصل نهایی فراتر از بازهی تعریف شدهی Int32 است.برای رفع این مشکل باید ...
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 ...
متد زیر را که یکی از اشتباهات رایج حین استفاده از LINQ خصوصا جهت Binding اطلاعات است، در نظر بگیرید:IQueryable<Customer> GetCustomers()این متد در حقیقت هیچ چیزی را Get نمیکند! نام اصلی آن GetQueryableCustomers و یا GetQueryObjectForCustomersاست.IQueryable قلب LINQ است و تنها بیانگر یک عبارت (expression) از رکوردهایی میباشد که مد نظر شما است و نه بیشتر.IQueryable<Customer> youngCustomers = repo.GetCustomers().Where(m => m ...
با وجود امکانات مهیای توسط LINQ ، یک سری از عادات متداول حین کار با گروهی از اشیاء باید کنار گذاشته شوند؛ برای مثال چگونگی بررسی این مطلب که آیا شیء IEnumerable ما حاوی عنصری هست یا خیر.روش متداول انجام اینکار استفاده از متد Count است. چون این متد پیش از تدارک امکانات LINQ نیز وجود داشته، بنابراین اولین موردی که جهت بررسی آن به ذهن خطور میکند، استفاده از متد Count میباشد؛ برای مثال:void Method(IEnumerable<Status> statuses){ if (st ...
نگارش بعدی یا چهارم entity framework چیزی است شبیه به Fluent NHibernate . یعنی اگر مقالهای را در این زمینه مطالعه کنید و عنوان آن حذف شود، نمیتوان تشخیص داد که این مقاله مربوط به entity framework است یا Fluent NHibernate. هر چند entity framework حداقل دو نگارش دیگر لازم دارد تا NHibernate را کاملا پشت سر بگذارد.از آن طرف محبوبیت Linq to SQL هم هنوز پابرجا است و برای مثال سایت پر ترافیکی مثل stack overflow از آن استفاده میکند و بسیار هم ...
گاهی از اوقات نیاز میشود تا در یک لیست، آیتمهای تکراری موجود را مشخص کرد. به صورت پیش فرض متد Distinct برای حذف مقادیر تکراری در یک لیست با استفاده از LINQ موجود است که البته آنهم اما و اگرهایی دارد که در ادامه به آن پرداخته خواهد شد، اما باز هم این مورد پاسخ سؤال اصلی نیست (نمیخواهیم موارد تکراری را حذف کنیم).برای حذف آیتمهای تکراری از یک لیست جنریک میتوان متد زیر را نوشت:public static List<T> RemoveDuplicates<T>(List< ...
با کمک امکانات ارائه شده توسط LINQ ، میتوان بسیاری از اعمال برنامه نویسی را در حجمی کمتر، خواناتر و در نتیجه با قابلیت نگهداری بهتر، انجام داد که تعدادی از آنها را در ادامه مرور خواهیم کرد.الف) تهیه یک یک رشته، حاوی عناصر یک آرایه، جدا شده با کاما.using System.Linq;public class CLinq{ public static string GetCommaSeparatedListNormal(string[] data) { string items = string.Empty; foreach (var item in data) { items += it ...
در ابتدا مثالهای زیر را در نظر بگیرید: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"}, ...