Прежде всего, чтобы действительно ответить на ваш вопрос: вы можете вызвать лямбду «на месте», передав ее делегату:
bool x = ((Func<bool>) ()=>true) ();
Но в вашем коде нет необходимости в лямбде впервое место;Я не понимаю, почему у вас есть лямбда вообще.Вы хотите вычислить логическое значение, поэтому вычислите логическое значение :
Selected = (x == 1949 && !ClientSinceYearOnly.HasValue) ||
(ClientSinceYearOnly.Value == x)
(Также обратите внимание, что вам не нужно проверять, имеет ли значение, допускающее обнуляемое значение, перед тем, как сравнивать; равенство "поднято до нуля" в C #.)
Во-вторых, этот запрос беспорядок, потому что у вас есть особый случай там.Я бы не стал так писать ваш запрос.Я бы скорее сказал:
var choices = new List<Item>();
choices.Add(new SelectListItem()
{
Text = "Unselected",
Value = null;
Selected = ClientSinceYearsOnly == null
};
choices.AddRange(
Enumerable.Range(1950, DateTime.Now.Year - 1951)
.Select(x => new SelectListItem()
{
Text = x.ToString(),
Value = new DateTime(x, 1, 1).ToString(),
Selected = x == ClientSinceYearOnly
});
Намного понятнее.Или напишите себе метод расширения, который помещает что-то в начало последовательности:
public static IEnumerable<T> Prepend<T>(this IEnumerable<T> sequence, T first)
{
yield return first;
foreach(T item in sequence)
yield return item;
}
, а затем:
var choices =
Enumerable.Range(1950, DateTime.Now.Year - 1951)
.Select(x => new SelectListItem()
{
Text = x.ToString(),
Value = new DateTime(x, 1, 1).ToString(),
Selected = x == ClientSinceYearOnly
})
.Prepend(new SelectListItem()
{
Text = "Unselected",
Value = null;
Selected = ClientSinceYearsOnly == null
});