C# 使用LINQ返回与基于属性的相关项不同的项
所以我有一个对象列表,让我们称它们为大象 每个大象对象都有一个名为ClonedFrom的属性。这是Elephant类型,用于指向在的图像中创建此新对象的对象 大象类还有另一个名为HasTrunk的属性,它的类型为C# 使用LINQ返回与基于属性的相关项不同的项,c#,.net,linq,C#,.net,Linq,所以我有一个对象列表,让我们称它们为大象 每个大象对象都有一个名为ClonedFrom的属性。这是Elephant类型,用于指向在的图像中创建此新对象的对象 大象类还有另一个名为HasTrunk的属性,它的类型为bool 因此: 我们有 List<Elephant> herd 列表 我希望有一个LINQ查询,该查询将返回任何具有false Hastunk属性但也具有ClonedFrom属性的大象,该属性等于同一列表中Hastunk属性设置为true的另一个大象 例如,大象A
bool
因此:
我们有
List<Elephant> herd
列表
我希望有一个LINQ查询,该查询将返回任何具有false Hastunk属性但也具有ClonedFrom属性的大象,该属性等于同一列表中Hastunk属性设置为true的另一个大象
例如,大象A被克隆来创造新的大象B和C
B和C都存在于畜群列表中。B的hastTrunk设置为false,而C的hastTrunk设置为true
我想要一个返回B的查询。问题是如何检查来自父母的克隆数据是否相等?你可以在Clonedfrom地产上自行加入牧群,但你也必须检查他们的祖父母。我们应该走多远?
var results = herd.Where(e => !e.HasTrunk
&& e.ClonedFrom != null
&& e.ClonedFrom.HasTrunk
&& herd.Contains(e.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;
我不确定这是否回答了我的问题。我编辑了我的原始帖子,试图让它更清楚地显示我到底在寻找什么。您的查询看起来像是在搜索,以确保原始对象在列表中(在我上面的示例中是A)。这其实并不重要。@Sperick,因为您的原始语句听起来像是需要确保它在列表中:“……还有一个
ClonedFrom
属性等于同一列表中的另一个大象”。不管怎样,只要从这个答案中划掉最后一个检查,如果你不需要它,我想要一个LINQ查询。。。所以写一封信,如果你被困在什么地方,就到这里来。
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;