我希望使用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 =“”调用。
答案 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