2016-12-02 59 views
0

讓我首先承認,我可能沒有正確地問這個問題,因爲我意識到你不能正確使用GroupByDateTime值,但我一直在Objective-C工作四年,而且我還沒有非常使用LINQ。這裏是我當前的代碼:如何通過枚舉和日期將LINQ to Entities結果分組?

var filteredEvents = events.Where(e => e.EventDate < DateTimeOffset.Now.AddMonths(1)).GroupBy(e => e.EventStatusKey); 

在這段代碼,events是一個匿名類型包括四個字段,包括EventDateDateTime)和EventStatusKeyenum)的一個IEnumerable

目前,上面的代碼返回兩組事件狀態ReadyInProgress。不過,我還需要根據日期分解Ready事件。具體來說,我需要Ready比賽時,不同的組:

EventDate >= DateTime.Date.Today

EventDate < DateTime.Date.Today

回答

0

當然,你可以做這樣的事情:

var filteredEvents = 
    events.Where(e => e.EventDate < DateTimeOffset.Now.AddMonths(1)) 
    .GroupBy(e => new { 
     e.EventStatusKey, 
     BeforeToday = e.EventDate < DateTime.Today 
    }); 

這將集團所有的狀態,以及是否是今天之前。然後,您可以摺疊組(例如,當它INPROGRESS),像這樣:

var inProgress = filteredEvents.Where(fe => fe.Key.EventStatusKey == InProgress) 
           .SelectMany(g => g); 

這將壓扁的羣體,基本上是忽略了「BeforeToday」標誌。

+0

我曾使用過匿名類型(是嗎?)爲GroupBy lambda,但我不明白,每個組件實際上是創建一個新的密鑰。看起來很明顯,但我真的很感謝你的幫助。 –

+1

@WilliamSmith不是問題,樂意幫忙。是的,它的確在創建一個匿名對象。它的工作原理是,現在匿名對象現在是一個鍵 - 而匿名對象實現'.Equals()'和'.GetHashCode()',以便兩個具有相同屬性的不同對象被視爲相等 – Rob