1

我试图找出如何做到这一点,但仍然与 Linq 语法混淆。

我的目的是使用指定的 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'的类型。”

这是什么意思?我真的很需要你的帮助。谢谢你。

4

2 回答 2

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_>的最大值。EffectiveDateEmployeeCode

于 2013-02-18T09:06:12.030 回答
1

您的代码的问题是您将组g视为单个工作结果。实际上,它是它们的列表。此外, 的目的是g.EffectiveDate.Value.Equals(date)什么?date如果不存在与date变量匹配的生效日期,则将导致最大生效日期始终为或不存在。

以下应该有效:

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

EffectiveDate这将返回指定的最大值employeeCode

于 2013-02-18T08:41:01.740 回答