Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ返回与基于属性的相关项不同的项_C#_.net_Linq - Fatal编程技术网

C# 使用LINQ返回与基于属性的相关项不同的项

C# 使用LINQ返回与基于属性的相关项不同的项,c#,.net,linq,C#,.net,Linq,所以我有一个对象列表,让我们称它们为大象 每个大象对象都有一个名为ClonedFrom的属性。这是Elephant类型,用于指向在的图像中创建此新对象的对象 大象类还有另一个名为HasTrunk的属性,它的类型为bool 因此: 我们有 List<Elephant> herd 列表 我希望有一个LINQ查询,该查询将返回任何具有false Hastunk属性但也具有ClonedFrom属性的大象,该属性等于同一列表中Hastunk属性设置为true的另一个大象 例如,大象A

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

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

大象类还有另一个名为HasTrunk的属性,它的类型为
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;