LINQ-所有条件

Sha*_*yan 1 .net c# linq

我有一个班级:

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?

Tho*_*que 6

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)