2013-02-18 173 views
1

我試圖找出如何做到這一點,但仍然與Linq sytax混淆。group by select max in linq

我的目的是尋找最大EFFECTIVEDATE與指定empCode

var x = (from workingResult in this.DataWorkspace.ApplicationData.WorkingResults 
     group workingResult by workingResult.EmployeeCode into g 
     where g.EmployeeCode == employeeCode 
     && (g.EffectiveDate.HasValue 
     && g.EffectiveDate.Value.Equals(date)) 
     select new {EffectiveDate = g.Max(d=>d.EffectiveDate)}); 

但是編譯器顯示我這個

「找不到源類型的查詢模式的實現」 ... '。'GroupBy'找不到,請考慮明確指定範圍變量'workingResult'的類型。「

這是什麼意思?我真的很需要你的幫助。 謝謝。

+0

'this.DataWorkspace.ApplicationData.WorkingResults'是什麼類型? – 2013-02-18 08:39:48

回答

1

您的代碼存在的問題是您將組g視爲單個workingResult。實際上它是它們的一個列表。此外,g.EffectiveDate.Value.Equals(date)的目的是什麼?如果不存在與date變量匹配的生效日期,則會導致最大生效日期始終爲date或不生效。

下面應該工作:

DataWorkspace.ApplicationData.WorkingResults 
      .Where(x => x.EmployeeCode == employeeCode) 
      .Max(x => x.EffectiveDate); 

這將返回指定的employeeCode最大EffectiveDate

1

該行where g.EmployeeCode == employeeCode無效。 g類型爲IEnumerable<IGrouping<_EmployeeCode type_, _Working result type_>>。請嘗試以下操作:

var x = from g2 in (from workingResult in this.DataWorkspace.ApplicationData.WorkingResults 
        group workingResult by workingResult.EmployeeCode into g 
        select g) 
     select new {EmployeeCode = g2.Select(w => w.EmployeeCode), MaxEffectiveDate = g2.Max(w => w.EffectiveDate)}; 

現在x包含最大EffectiveDateIEnumerable<_EmployeeCode type_, _Effective data type_>每個EmployeeCode