2013-02-18 2 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'? –

ответ

1

Проблема с вашим кодом заключается в том, что вы обрабатываете группу g, как если бы это был единственный рабочий результат. На самом деле это их список. Кроме того, какова цель g.EffectiveDate.Value.Equals(date)? Это приведет к тому, что максимальная дата вступления в силу всегда будет date или ничего, если не существует эффективной даты, которая соответствует переменной date.

должно работать:

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

Это возвращает максимальное EffectiveDate для указанного employeeCode.

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 содержит IEnumerable<_EmployeeCode type_, _Effective data type_> макс EffectiveDate для каждого EmployeeCode.