我有一个表Request和一个表Task。请求任务是一对多的关系。在请求中有一个状态。任务中也有状态。有时,人们会将所有“任务”状态标记为已完成,但不会将“请求”状态标记为已完成。我需要做一些维护工作。这是我的代码:
List<Request> RequestsNeedsAction = new List<Request>();
var requests = Requests.Where(r => r.RequestStatusID == 2 ||
r.RequestStatusID == 6)
.ToList();
foreach (var request in requests)
{
bool taskAllCompleted = true;
foreach (var task in request.Tasks)
{
if (task.TaskStatusID != 2 && task.TaskStatusID != 5)
{
taskAllCompleted = false;
break;
}
}
if ( taskAllCompleted )
{
RequestsNeedsAction.Add( request );
}
}
RequestsNeedsAction.Dump();
在LINQ或tsql中有更简单的方法吗?
答案 0 :(得分:4)
您可以尝试这样的事情:
var RequestsNeedsAction = Requests.Where(r =>
(r.RequestStatusID == 2 || r.RequestStatusID == 6)
&& !r.Tasks.Any( t => t.TaskStatusID != 2 && t.TaskStatusID != 5)).ToList();
答案 1 :(得分:2)
我认为这就是你要找的东西。您没有在问题中说,但是如果RequestStatusId
为2或6,则我从代码中推断请求未完成,如果TaskStatusId
为2或5,则任务完成。
List<Request> RequestsNeedsAction =
Requests
.Where(r =>
(r.RequestStatusID == 2 || r.RequestStatusID == 6) &&
r.Tasks.All(t => task.TaskStatusID == 2 || task.TaskStatusID == 5))
.ToList();