Как бы я написал этот динамический запрос linq? - PullRequest
1 голос
/ 20 октября 2010

В основном я хочу написать запрос linq для определения количества дней, в течение которых они присутствовали. Но у меня есть эти шесть временных фильтров: сегодня, вчера, текущий месяц, предыдущий месяц, текущий год, предыдущий год. Итак, теперь у меня есть эти запросы, которые я упростил, но перед этими запросами ниже я фактически приказываю этим сотрудникам по разным аспектам и после заказа, как вы можете видеть, я присваиваю ранг, а затем в то же время выясняю его количество (которое может или не может быть использовано для их ранжирования позже) -

var result=datacontext.Employee(c=>c.Company.Id==companyId).Select((k, index) => new EmployeeDTO()
{
  EmployeeId=k.Employee.Id,
  CompanyId=Employee.Company.Id
  PresentCount=(from e in employeeAttendance
                 where d.RecNum == k.recnum
                 && d.date_present.Year == DateTime.Today.Year
                 && d.date_present.Month == DateTime.Today.Month
                 && d.date_present.Day == DateTime.Today.Day
                 select d).Count()  
}

Так что теперь, когда фильтр, скажем, в предыдущем году у меня -

var result=datacontext.Employee(c=>c.Company.Id==companyId).Select((k, index) => new EmployeeDTO()
{
  Position=
  EmployeeId=k.Employee.Id,
  CompanyId=Employee.Company.Id
  PresentCount=(from e in employeeAttendance
                 where d.RecNum == k.recnum
                 && d.date_present.Year == (DateTime.Today.Year-1)

}

и если он у меня есть в текущем месяце -

var result=datacontext.Employee(c=>c.Company.Id==companyId).Select((k, index) => new EmployeeDTO()
{
  EmployeeId=k.Employee.Id,
  CompanyId=Employee.Company.Id
  PresentCount=(from e in employeeAttendance
                 where d.RecNum == k.recnum
                 && d.date_present.Month == DateTime.Today.Month
                 && d.date_present.Year == DateTime.Today.Year

}

Я хочу объединить все это в одном запросе с динамическим предложением для определения текущего количества?

1 Ответ

2 голосов
/ 20 октября 2010

Просто создайте простую обертку. Например:

IQueryable<EmployeeDTO> GetEmployeeCount(Expression<Func<DateTime, bool>> pred)
{
  var result=datacontext.Employee(c=>c.Company.Id==companyId).
     Select((k, index) => new EmployeeDTO()
  {
    EmployeeId=k.Employee.Id,
    CompanyId=Employee.Company.Id,
    PresentCount=(from e in employeeAttendance
                  where d.RecNum == k.recnum && pred(d.date_present)
                  select d).Count()  
  });
  return result;
}

Использование:

var r = GetEmployeeCount(d => d.Year == (DateTime.Today.Year-1));

var r = GetEmployeeCount(
   d => d.Month == DateTime.Today.Month && d.Year == DateTime.Today.Year);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...