我有一个班级:
Public Class Task
{
Public Guid TaskId { get ; set }
Public Guid ParentId { get ; set }
...
}
另一个班:
Public Class ContractDetail
{
Public Guid ContractDetailsID {get;set}
Public Guid TaskId { get;set}
...
}
我想检查所有任务是否都有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;
.....
}
但它总是会返回false。
如何检查所有任务是否包含ContractDetails?
答案 0 :(得分:6)
bool allTasksHaveContractDetails = Tasks.All(t => ContractDetails.Any(cd => cd.TaskId == t.TaskId))
另一种方法:
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());
答案 1 :(得分:0)
而不是包含,请尝试:
Sids.Any(s => s.Equals(p.SakhtarId))
并尝试通过确保此条件确实为真来调试它。
答案 2 :(得分:0)
我不确定我是否完全了解您的使用方案,但假设您要检查每个Task
是否存在关联的ContractDetail
,即ContractDetail
和{ {1}}具有相同的Task
,您可以从两个集合中选择唯一ID,并使用TaskId
,如下所示:
IEnumerable.SequenceEquals