所以我有一个对象列表,让我们称之为Elephants。
每个大象对象都有一个名为ClonedFrom的属性。这是Elephant类型,用于指向在图像中创建此新对象的对象。
Elephant类还有一个名为HasTrunk的属性,类型为bool
。
所以:
public class Elephant
{
public Elephant ClonedFrom { get; set; }
public bool HasTrunk { get; set; }
}
我们有
List<Elephant> herd
我想要一个LINQ查询,它会返回任何具有错误HasTrunk属性的Elephants,但也有一个ClonedFrom属性等于HasTrunk属性设置为true的同一列表中的另一个Elephant。
因此,例如,大象A被克隆以创建新的大象B和C
B和C都存在于牧群列表中。 B将HasTrunk设置为false,而C将hasTrunk设置为true。
我想要一个返回B的查询。
答案 0 :(得分:1)
var results = herd.Where(e => !e.HasTrunk
&& e.ClonedFrom != null
&& e.ClonedFrom.HasTrunk
&& herd.Contains(e.ClonedFrom));
答案 1 :(得分:0)
问题是你如何检查Clonedfrom父母的平等?你可以在Clonedfrom属性上自我加入,但是你必须检查他们的祖父母。我们应该走多远? 您也可以使用父母的getHashCode检查它们是否具有相同的引用,但我不确定它是否适用于您的情况:
Var results = from h1 in herd
join h2 in herd
on h1.ClonedFrom.getHashCode()
equals
h2.ClonedFrom.getHashCode()
where !h1.hasTrunk && h2.hasTrunk
select h1;