РЕДАКТИРОВАТЬ: Хорошо, я бы неправильно понял раньше. То есть вы в основном следите за элементами (t1
) в списке, в которых нет элемента t2
, такого как t1.UserId == t2.ParentId
? В этом случае я предлагаю вам использовать:
Я подозреваю, что вы хотите:
var test = from t1 in list
join t2 in list
on t1.UserId equals t2.ParentId into g
where !g.Any()
select t1.Name;
Обратите внимание, что здесь я не использую анонимный тип, поскольку вы выбираете только одно значение.
Другой альтернативой будет:
var parents = new HashSet<Guid>(list.Where(x => x.ParentId != null)
.Select(x => x.ParentId.Value));
var query = list.Where(t1 => !parents.Contains(t1.UserId));