如何使用Group by在Linq语句中引入Let关键字

我有以下带有’group by’子句的Linq语句,并且想知道如何引入let或任何其他语句以避免重复子查询lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First()以下示例中的lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First()

 var completionTimeModels = from timeline in processTimelines group timeline by timeline.LifecycleEventId into grouping select new CompletionTimeViewModel() { // How to avoid repeating the same query to find the life cycle event? Name = lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First().LifecycleEventName, DisplayName = lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First().LifecycleEventDisplayName }; 

 var completionTimeModels = from timeline in processTimelines group timeline by timeline.LifecycleEventId into grouping let foo = lifecycleEvents.First(i => i.LifecycleEventId == grouping.Key) select new CompletionTimeViewModel() { Name = foo.LifecycleEventName, DisplayName = foo.LifecycleEventDisplayName }; 
 var completionTimeModels = from timeline in processTimelines group timeline by timeline.LifecycleEventId into grouping let lifecyleEvent = lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First() select new CompletionTimeViewModel() { Name = lifecyleEvent.LifecycleEventName, DisplayName = lifecyleEvent.LifecycleEventDisplayName }; 
 var completionTimeModels = from timeline in processTimelines group timeline by timeline.LifecycleEventId into grouping let current = lifecycleEvents.Where(i => i.LifecycleEventId == grouping.Key).First() select new CompletionTimeViewModel() { // How to avoid repeating the same query to find the life cycle event? Name = current.LifecycleEventName, DisplayName = current.LifecycleEventDisplayName }; 
 var completionTimeModels = from timeline in processTimelines group timeline by timeline.LifecycleEventId into grouping let lifecyleEvent = lifecycleEvents.First(i => i.LifecycleEventId == grouping.Key) select new CompletionTimeViewModel() { // How to avoid repeating the same query to find the life cycle event? Name = lifecyleEvent.LifecycleEventName DisplayName = lifecyleEvent.LifecycleEventDisplayName };