在 lambda 表达式中分配局部变量

cod*_*joe 2 c# lambda

我有一个 lambda 表达式,其中需要分配一个局部变量以避免每个结果集调用我的 RetrieveAge(DatetimebirthDate) 两次。

我的 lambda 表达式如下所示:

result = myList.AsEnumerable().Where(f => DateHelper.RetrieveAge(f.Birthdate) >= 20 && DateHelper.RetrieveAge(f.Birthdate) <= 40).Select(x => new Person { Name = x.Name, Id = x.Id, Alias = x.Alias }).ToList();
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现以下目标:

var result = myList.AsEnumerable().Where(f => { var age = DateHelper.RetrieveAge(f.Birthdate); age >= 20 && age <= 40 }).Select(x => new Person { Name = x.Name, Id = x.Id, Alias = x.Alias }).ToList();
Run Code Online (Sandbox Code Playgroud)

但我不知道如何正确地做到这一点。任何提示或建议将不胜感激。

das*_*ght 5

你快到了 - 你需要添加一个return和一个分号:

var result = myList
    .AsEnumerable()
    .Where(f => {
         var age = DateHelper.RetrieveAge(f.Birthdate);
         return age >= 20 && age <= 40; // <<== Here
    }).Select(x => new Person {
         Name = x.Name, Id = x.Id, Alias = x.Alias }
    ).ToList();
Run Code Online (Sandbox Code Playgroud)