我试图找出如何做到但仍然与Linq sytax混淆。
我的目的是使用指定的empCode
找到max effectiveDatevar 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 :(得分:1)
您的代码的问题在于您将组g
视为单个workingResult。实际上它是一个列表。此外,g.EffectiveDate.Value.Equals(date)
的目的是什么?如果不存在与date
变量匹配的生效日期,则会导致最大生效日期始终为date
或没有任何内容。
以下内容应该有效:
DataWorkspace.ApplicationData.WorkingResults
.Where(x => x.EmployeeCode == employeeCode)
.Max(x => x.EffectiveDate);
这将返回指定EffectiveDate
的最大employeeCode
。
答案 1 :(得分: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
。