Добавление отдельных функций сумм в оператор IQueryable LINQ - PullRequest
1 голос
/ 18 января 2011

Я собираюсь заполнить Telerik RadGrid IQueryable DataSource, но включить в него 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)

Этот один оператор затем будет использоваться в качестве IQueryable DataSource для моей RadGrid, вызываемой DataField = "" RadGrid.

1 Ответ

1 голос
/ 18 января 2011

Примерно так:

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;
}

Edit: Извините, я только что заметил, что вызов GetTotalReg использует другую сущность. Я изменю свой ответ.

Обновление: Суммарный счет теперь суммируется с data.Times

...