我有一个班级:
Public Class Task
{
Public Guid TaskId { get ; set }
Public Guid ParentId { get ; set }
...
}
Run Code Online (Sandbox Code Playgroud)
而另一课:
Public Class ContractDetail
{
Public Guid ContractDetailsID {get;set}
Public Guid TaskId { get;set}
...
}
Run Code Online (Sandbox Code Playgroud)
我想检查所有任务是否有ContractDetail然后做一些事情我写了这个查询:
List<Guid> Sids = new List<Guid>();
Sids = Tasks.Where(p => p.ParentId == ParentId).Select(p => p.TaskId).ToList();
if(ContractDetails.All(p => Sids.Contains(p.TaskId))
{
int i = 5;
.....
}
Run Code Online (Sandbox Code Playgroud)
但它总是返回false.
如何检查所有任务是否有ContractDetails?
bool allTasksHaveContractDetails = Tasks.All(t => ContractDetails.Any(cd => cd.TaskId == t.TaskId))
Run Code Online (Sandbox Code Playgroud)
另一种方法:
var query =
from t in Tasks
join cd in ContractDetails on t.TaskId equals cd.TaskId into tmp
select tmp;
bool allTasksHaveContractDetails = query.All(x => x.Any());
Run Code Online (Sandbox Code Playgroud)