1

我希望使用 IQueryable 数据源填充 Telerik RadGrid,但在该网格内包含 5 个 Total 列。当我创建单独的报表时,我为总计构建了单独的函数,但是在将它们迭代到我当前的网格 LINQ 语句中时遇到了一些麻烦。

我当前的 LINQ 语句如下所示:

public static IQueryable GetUnapprovedTimesheets(string Period)
    {
        DataContext Data = new DataContext();

        var Times = (from c in Data.System_Times
                     where c.Period == Period && c.Status == 1
                     orderby c.Employee.LName
                     select c).GroupBy(s => s.EmployeeID).Select(x => x.FirstOrDefault());

        return Times;
    }

此语句获取输入期间的时间表,并显示状态为 1 的记录,然后按 EmployeeID 分组显示。此语句将所有内容正确拉入网格,但我还想添加常规、加班、旅行和子的总计。

我为动态报告单独构建的函数如下所示:

public static decimal? GetTotalReg(int EmployeeID, string Period)
    {
        DataContext Data = new DataContext();
        var Total = (from c in Data.Times
                     where c.EmployeeID == EmployeeID && c.Period == Period && c.PayCode == "211"
                     select c.Hours);

        return Total.Sum();
    }

有没有办法将第二个声明合并到第一个声明中?(请记住,我不仅要合并一个,还要合并 5 个 Sum 语句)

然后,这一语句将用作我的 RadGrid 的 IQueryable DataSource,由 RadGrid 的 DataField=" " 调用。

4

1 回答 1

1

像这样的东西:

public static IQueryable GetUnapprovedTimesheets(string period)
{
   DataContext data = new DataContext();

   var times = data
                   .Where(a => a.Period == period && a.Status == 1)
                   .OrderBy(a => a.Employee.LName)
                   .GroupBy(a => a.EmployeeID)
                   .Select(
                      a => new{
                               System_Time = a.FirstOrDefault(),
                               TotalReg = data.Times
                                           .Where(b => b.EmployeeID == a.Key 
                                                    && b.Period == period
                                                    && b.PayCode == "211")
                                           .Sum(b => b.Hours)
                              }
                          );

   return times;
}

编辑: 对不起,我刚刚注意到GetTotalReg呼叫使用了不同的实体。我会修改我的答案。

更新: TotalReg 现在从data.Times

于 2011-01-18T16:57:12.383 回答