دوستان گرامی بااموزشی دیگر در زمینه Asp درخدمت شما هستم. درمورد ویژگی های C# که LINQ را پشنیبانی می کنند میخوام آموزش یراتون بگذارم.این بخش سازه های جدید زبان، معرفی شده در C# 3.0 را معرفی می کند. گرچه همه ی این ویژگی ها تا حدی با query های LINQ استفاده می شوند، اما به LINQ محدود نیستند و می توانند در هر کانتکستی که مفید هستند، استفاده شوند.

عبارات query

عبارات query از یک ترکیب اعلانی ( declarative syntax) مشابه برای SQL یا XQuery به query روی مجموعه های IEnumerable استفاده می کند. در زمان کامپایل، ترکیب query به فراخوانی های متود (method calls) به اجرای ارائه کننده ی LINQ از روش های استاندارد گسترش اپراتور query تبدیل می شود. برنامه ها اپراتورهای استاندارد query را که با تعیین فضانام مناسب با استفاده از دستور using در حوزه قرار می گیرند، کنترل می کنند. عبارت زیر یک ردیف از رشته ها را گرفته، آنها را طبق اولین کاراکتر در رشته گروه بندی می کند و گروه ها را مرتب می کند.

var query = from str in stringArray

‎ group str by str[0] into stringGroup

‎ orderby stringGroup.Key

‎ select stringGroup;‎

برای اطلاعات بیشتر LINQ Query Expressions (C# Programming Guide) را بررسی کنید.

متغیرهای تایپ شده به طور ضمنی (Implicitly Typed Variables (var))

هنگامی که یک متغیر را اعلام کرده و مقدار دهی می کنید، به جای تعیین واضح نوع می توانید از اصلاح کننده ی var برای ساخت کامپایلر استفاده کنید تا نوع را اختصاص دهد، همانطور که در زیر نشان داده شده است:

var number = 5;‎

var name = “Virginia”;‎

var query = from str in stringArray

‎ where str[0] == ‘m’‎

‎ select str;‎

متغیرهای اعلام شده به عنوان var به قدرت متغیرهایی که نوع آنها را به طور واضح مشخص کرده اید، تایپ شده اند. استفاده از var امکان ایجاد انواع بدون نام را ممکن می سازد، اما می تواند برای هر نوع متغیر داخلی استفاده شود. ردیف ها با تایپ ضمنی اعلام شوند.

برای اطلاعات بیشتر Implicitly Typed Local Variables (C# Programming Guide) را بررسی کنید.

مقادیر اولیه ی آبجکت و مجموعه (Object and Collection Initializers)

مقادیر اولیه ی آبجکت و مجموعه، مقدار دهی اولیه ی آبجکت ها را بدون فراخوانی یک سازنده برای آبجکت، فراهم می سازد. مقادیر اولیه معمولا در عبارات query استفاده می شوند، وقتی که منبع داده را به یک نوع داده ی جدید برنامه ریزی می کند. فرض گروهی با نام Customer با پراپرتی های عمومی Name و Phone مقدار دهی اولیه ی آبجکت می تواند مانند کد زیر استفاده شود.

Customer cust = new Customer { Name = “Mike”, Phone = “555-1212” };‎

برای اطلاعات بیشتر Object and Collection Initializers (C# Programming Guide) را بررسی کنید.

انواع بدون نام:

یک نوع بدون نام توسط کامپایلر ساخته می شود و نام نوع فقط برای کامپایلر در دسترس می باشد. انواع بدون نام یک راه مناسب برای گروه بندی موقت یک مجموعه از پراپرتی ها در یک query ارائه می دهند، بدون اینکه نیاز به تعریف یک نوع نام گذاری شده ی مجزا باشد. انواع بدون نام با یک عبارت جدید و یک آبجکت اولیه مقدار دهی می شوند، مانند زیر:

select new {name = cust.Name, phone = cust.Phone};‎

برای اطلاعات بیشتر Anonymous Types (C# Programming Guide) را بررسی کنید.

روش های extension

روش extension یک روش استاتیک می باشد که می تواند یک نوع در ارتباط باشد. طوری که می تواند به عنوان یک روش نمونه روی نوع فراخوانده شود. این ویژگی به شما کمک می کند تا بدون تغییر حقیقی انواع موجود به آنها متودهای جدید اضافه کنید. اپراتورهای استاندارد query مجموعه ای از متودهای extension هستند که برای هر نوعی که IEnumerable را اجرا می کند، قابلیت LINQ query ارائه می دهد.

برای اطلاعات بیشتر Extension Methods (C# Programming Guide) را بررسی کنید.

عبارات Lambda

یک عبارت lambda، یک تابع درون خطی (inline function) است که از اپراتور => برای مجزا کردن پارامترهای داخلی از بدنه ی تابعاستفاده می کند و در زمان کامپایل می تواند به یک نماینده (delegate) یا درخت بیان تبدیل شود. در برنامه نویسی LINQ، ,وقتی فراخوانی مستقیم متودها به اپراتورهای استاندارد query را انجام می دهید، با عبارات lambda روبرو خواهید شد.

برای اطلاعات بیشتر بخش های زیر را بررسی کنید:

Anonymous Functions (C# Programming Guide)
Lambda Expressions (C# Programming Guide)
Expression Trees (C# and Visual Basic)

پراپرتی های اجراشونده ی خودکار:

پراپرتی های اجرا شونده ی خودکار بیان پراپرتی را مختصرتر می کنند. وقتی که یک پراپرتی را طوریکه در مثال زیر نشان داده شده، اعلام می کنید، کامپایلر یک فیلد پشتیبانی خصوصی و بدون نام ایجاد خواهد کرد که به جز از طریق پراپرتی گیرنده و تنظیم کننده قابل دسترسی نیست.

public string Name {get; set;}‎

برای اطلاعات بیشتر Auto-Implemented Properties (C# Programming Guide) را بررسی کنید.