将单独的和函数添加到IQueryable LINQ语句

时间:2011-01-18 16:00:08

标签: c# linq iqueryable radgrid telerik-grid

我希望使用IQueryable DataSource填充Telerik RadGrid,但在该Grid中包含5个Total列。当我创建单独的报告时,我已经为Totals构建了单独的函数,但是在将它们迭代到我当前的Grid的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;
    }

此语句在输入的时间段内抓取Timesheets,并显示状态为1的记录,然后按EmployeeID显示这些记录。这个声明正确地将所有内容都拉入网格,但我还想为常规,加班,旅行和Sub添加总计。

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

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数据源,由RadGrid的DataField =“”调用。

1 个答案:

答案 0 :(得分: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

求和