متد ()Select
روش پرس و جوی دیگر که دقیقاً معادل با عبارت select میباشد، متد ()select است. این متد یک عبارت لامبدا را به عنوان پارامتر میپذیرد. این عبارت لامبدا تمامی عناصر منبع داده را طرح ریزی میکند. در مثال زیر با استفاده از متد ()select تمامی عناصر مجموعه people را بدست آوردهایم.
var result = people.Select(p => p);
یک عبارت لامبدا را به عنوان آرگومان به متد ()select ارسال کردهایم. عبارت لامبدا یک پارامتر به نام p دارد که در هر بار یک شیء از نوع Person در آن قرار میگیرد، این شیء در صورتی در نتیجه کوئری قرار میگیرد که با شرطی که در سمت راست عبارت لامبدا نوشته شده است مطابقت داشته باشد. در کوئری بالا شرط خود شیء انتخابی است پس تمامی عناصر مجموعه people در نتیجه کوئری قرار میگیرند. در زیر نمونههای بیشتری از کاربرد عبارت Select را مشاهده میکنید. در این مثالها عبارات لامبدا مختلفی به متد ()select ارسال شده است :
1 – انتخاب خاصیت FirstName از تمامی عناصر people :
var firstNames = people.Select(p => p.FirstName);
2 – دو خاصیت FirstName و LastName از هر عنصر مجموعه را با هم ترکیب کرده و در نتیجه پرس و جو قرار میدهد :
var fullNames = people.Select(p => p.FirstName + " " + p.LastName);
3 – ابتدا یک نوع بی نام شامل یک خاصیت به نام FullName را ایجاد کرده و ترکیب 2 خاصیت FirstName و LastName را در آن قرار میدهد :
var annonymous = people.Select(p => new { FullName = p.FirstName + " " + p.LastName } );
نسخه دیگری از متد ()select نیز وجود دارد، این نسخه یک عبارت لامبدا شامل 2 پارامتر ورودی میپذیرد، اولین پارامتر بیانگر عنصر پرس و جو شده و دومین پارامتر نشان دهنده ایندکس آن عنصر در منبع داده است :
var personsWithIndex = people.Select((p, i) => new { Person = p, Index = i });
کوئری Linq زیر معادل آن است :
var personsWithIndex = from p in people select new { Person = p, Index = people.IndexOf(p) };
سپس شما میتوانید در هنگام چاپ مقادیر، اندیس هر عنصر را نیز بنویسید :
foreach (var p in personsWithIndex) { Console.WriteLine(String.Format("[{0}] {1}", p.Index, p.Person.FirstName)); }
[0] John [1] Mark [2] Lisa
شما میتوانید از عبارات پرس و جو برای خوانایی بیشتر کد خود استفاده کنید یا متدهای Linq را با استفاده از شکل متدی Linq فراخوانی کنید در این حالت باید از عبارات لامبدا استفاده کنید .