LINQ-所有条件

时间:2011-04-20 08:00:03

标签: c# .net linq

我有一个班级:

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?

3 个答案:

答案 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