构造LINQ查询以从List返回一个项目,该项目由一个属性与其他成员相关但由第二个属性不同

时间:2014-10-04 14:52:10

标签: c# linq

所以我有一个对象列表,让我们称之为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都存在于herd List中,并且两者都具有相同的ClonedFrom属性值(A)。 B将HasTrunk设置为false,而C将hasTrunk设置为true。

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

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

1 个答案:

答案 0 :(得分:1)

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