构造LINQ查询以返回列表中的一个项,该项通过一个属性与其他成员相关,但通过第二个属性不同

本文关键字:一个 属性 成员 其他 第二个 LINQ 列表 构造 返回 查询 | 更新日期: 2023-09-27 18:25:29

所以我有一个对象列表,让我们称它们为大象。

每个大象对象都有一个名为ClonedFrom的属性。这是Elephant类型,用于指向在图像中创建此新对象的对象。

Elephant类还有一个名为HasTrunk的属性,它属于bool类型。

因此:

public class Elephant
{
  public Elephant ClonedFrom { get; set; }
  public  bool     HasTrunk { get; set; }
}

我们有

   List<Elephant> herd

我想要一个LINQ查询,它将返回任何具有假HasTrunk属性但同时具有ClonedFrom属性值的Elephant,该值等于同一列表中HasTrunk特性设置为true的另一个Elephant。

例如,大象A被克隆以创建新的大象B和C

B和C都存在于群列表中,并且都具有相同的ClonedFrom属性值(A)。B的HasTrunk设置为false,而C的HasTruck设置为true。

我想要一个返回B.的查询

(注意:A是否在列表中并不重要)

构造LINQ查询以返回列表中的一个项,该项通过一个属性与其他成员相关,但通过第二个属性不同

List<Elephant> herd = new List<Elephant>{
    new Elephant(), new Elephant(), new Elephant(), new Elephant()
};
herd[0].HasTrunk = true;
herd[1].HasTrunk = true;
herd[2].HasTrunk = false;
herd[3].HasTrunk = false; 
herd[0].ClonedFrom = herd[0];
herd[1].ClonedFrom = new Elephant();
herd[2].ClonedFrom = herd[0];
herd[3].ClonedFrom = new Elephant();
herd.Where(elephant => !elephant.HasTrunk && herd.Where(elephant2 => 
elephant2.HasTrunk).Any(elephant2 => elephant2.ClonedFrom == elephant.ClonedFrom)); //One item - elephant number 2