“Tasks” table:
x
public class Task
{
public int ID { get; set; }
public string name { get; set; }
}
“Task History” table:
public class TaskHistory
{
public Guid ID { get; set; }
public DateTime Created { get; set; }
public DateTime LastModified { get; set; }
public string CreatedBy { get; set; }
public int TaskID { get; set; }
public TaskStatus { get; set; }
}
Sql query: Which tasks were completed in the last 30 days?
select * from Tasks
where TaskStatus in ('Completed', 'Rejected')
and ID in (
select distinct TaskID
from TaskHistory
where LastModified >= DateAdd(day, -30, GETDATE())
)
Q: What is the equivalent LINQ expression for this SQL query?
Advertisement
Answer
This query should do what yo want:
var statuses = new [] {"Completed", "Rejected"};
var query =
from t in ctx.Tasks
where statuses.Contains(t.TaskStatus)
&& ctx.TaskHistory
.Any(th => th.LastModified <= DateTime.Now.AddDays(-30)
&& th.TaskID == t.ID)
select t;