عبارت let
عبارت let، به شما امکان میدهد که، نتیجه یک عبارت را در عبارت پرس و جو ذخیره و در قسمتهای بعدی پرس و جو، از آن استفاده کنید. عبارت let زمانی مفید واقع میشود که، یک عبارت چندین بار در قسمتهای مختلف کوئری به کار برده شود، یا اینکه قصد داشته باشید برای یک خاصیت با نام طولانی یک نام کوتاهتر، انتخاب کنید.
List<Person> persons = new List<Person> { new Person { FirstName="John", LastName="Smith" }, new Person { FirstName="Henry", LastName="Boon" }, new Person { FirstName="Jacob", LastName="Lesley" } }; var query = from p in persons let fullName = p.FirstName + " " + p.LastName select new { FullName = fullName }; foreach (var person in query) { Console.WriteLine(person.FullName); }
در عبارت پرس و جو بالا، خاصیتهای FirstName و LastName را با هم ترکیب و نتیجه آن را با استفاده از عبارت let در یک متغیر ذخیره کردهایم. در ادامهی پرس و جو میتوانید از مقدار داخل این متغیر (fullName) استفاده کنید. در انتهای عبارت پرس وجو در مثال بالا یک خاصیت جدید به نام FullName را ساخته و مقدار متغیر را به آن نسبت دادهایم.
عبارت let شکل متدی ندارد. اما میتوانید با استفاده از متد select آن را شبیه سازی کنید :
var query = persons.Select(p => new { fullName = p.FirstName + " " + p.LastName }) .Select(p => new { FullName = p.fullName });
در زیر مثالهای بیشتری از کاربرد این عبارت را مشاهده میکنید :
int[] numbers = { 1, 2, 3, 4, 5 }; //Query Expression var query1 = from n in numbers let squared = n * n select squared; //Method Syntax var query2 = numbers.Select(n => new { squared = n * n }) .Select(n => n.squared);
//Query Expression var query1 = from p in persons let isTeenager = p.Age < 20 && p.Age > 12 where isTeenager select new { p.FirstName, p.LastName }; //Method Syntax var query2 = persons.Select(p => new { isTeenAger = p.Age < 20 && p.Age > 12 }) .Where(p => p.isTeenager) .Select(p => new { p.FirstName, p.LastName });
در کوئری بالا، مقدار متغیر حاصل از عبارت let را به عنوان آرگومان به متد Where ارسال کردهایم زیرا نتیجه عبارت حاصل، یک مقدار منطقی است .