2015-06-11 3 views
2

У меня есть таблица заработной платы сотрудника, который содержит:рамки сущности выбора в прошлом месяце записи

public partial class S_EmployeeSalary 
    { 
     public int SalaryId { get; set; } 
     public int TypeId { get; set; } 
     public int UserId { get; set; } 
     public double Salary { get; set; } 
     public Nullable<double> ExtraSalary { get; set; } 
     public Nullable<double> Insurance { get; set; } 
     public Nullable<double> Sanctions { get; set; } 
     public System.DateTime SalaryDate { get; set; } 

     public virtual C_UserItems C_UserItems { get; set; } 
    } 

и у меня есть кнопка, когда пользователь нажимает на нее, она создала копию с прошлым месяцем записей автоматически просто обновить записи нового месяц, что создано:

public ActionResult CreateNewRows(int typeId) 
{ 
    IQueryable<S_EmployeeSalary> moduleItems = db.S_EmployeeSalary 
     .Include(x => x.C_UserItems) 
     .Where(x => x.TypeId == typeId && DbFunctions.DiffDays(x.SalaryDate, DateTime.Now) > 30 && DbFunctions.DiffDays(x.SalaryDate, DateTime.Now) < 30); 

    foreach (var item in moduleItems) 
    { 
     S_EmployeeSalary entity = new S_EmployeeSalary 
     { 
      TypeId = typeId, 
      UserId = item.UserId, 
      Salary = item.Salary, 
      ExtraSalary = item.ExtraSalary, 
      Insurance = item.Insurance, 
      Sanctions = item.Sanctions, 
      SalaryDate = DateTime.Now 
     }; 
     db.S_EmployeeSalary.Add(entity); 
    } 

    db.SaveChanges(); 
} 

мой вопрос, как я могу просто указать последний месяц записей, чтобы выбрать его, я попытался DbFunctions.DiffDays, но оно не работает хорошо, есть кто-нибудь может помочь мне для новой идеи? отметить ее сотрудник зарплату, так что мне нужно в прошлом месяце не длится 30 дней

+1

Записей прошлого месяца или записей предыдущих 30 дней с сегодняшнего дня? – Mairaj

+0

его зарплата сотрудников, поэтому мне нужен последний месяц не последние 30 дней –

ответ

6

В зависимости, если вы хотите, последний месяц или за последние 30 дней (вопрос остается неясным)

Это за предыдущий месяц:

var startOfTthisMonth = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);  
var firstDay = startOfTthisMonth.AddMonths(-1); 
var lastDay = startOfTthisMonth.AddDays(-1); 

IQueryable<S_EmployeeSalary> moduleItems = db.S_EmployeeSalary 
    .Include(x => x.C_UserItems) 
    .Where(x => x.TypeId == typeId && 
       x.SalaryDate >= firstDay && 
       x.SalaryDate <= lastDay); 

Это за последние 30 дней:

var firstDay = DateTime.Today.AddDays(-30); 

IQueryable<S_EmployeeSalary> moduleItems = db.S_EmployeeSalary 
    .Include(x => x.C_UserItems) 
    .Where(x => x.TypeId == typeId && 
       x.SalaryDate >= firstDay); 
+0

спасибо, я постараюсь, и его зарплата сотрудников, поэтому мне нужен последний месяц не последние 30 дней –

1

выглядит эта часть не будет возвращать результат, так как это не может быть больше и маленькими чем 30 одновременно.

DbFunctions.DiffDays(x.SalaryDate, DateTime.Now) > 30 && DbFunctions.DiffDays(x.SalaryDate, DateTime.Now) < 30) 
+1

, что на самом деле не ответ –