Как ввести ключевое слово Let в оператор Linq с помощью Group by - PullRequest
7 голосов
/ 08 апреля 2011

У меня есть следующий оператор Linq с предложением 'Group by', и я хотел бы знать, как ввести оператор let или любой другой оператор, чтобы избежать повторения подзапроса, 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
    };

Ответы [ 4 ]

9 голосов
/ 08 апреля 2011
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
};
2 голосов
/ 08 апреля 2011
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
    };
1 голос
/ 09 апреля 2011
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
    };
1 голос
/ 08 апреля 2011
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
    };
...