عبارت 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 ارسال کرده‌ایم زیرا نتیجه عبارت حاصل، یک مقدار منطقی است .