1

Telerik RadGrid に IQueryable DataSource を設定しようとしていますが、そのグリッド内に 5 つの合計列を含めます。個々のレポートを作成するときに Totals 用に個別の関数を作成しましたが、それらをグリッド用の現在の 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();
    }

2 番目のステートメントを最初のステートメントに組み込む方法はありますか? (1 つだけでなく 5 つの Sum ステートメントを組み込む必要があることに注意してください)

この 1 つのステートメントは、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 に答える