2014-10-04 107 views
-1

因此,我有一個對象列表,我們稱之爲Elephants。使用LINQ返回與基於屬性的相關項目不同的項目。

每個大象對象都有一個名爲ClonedFrom的屬性。這是Elephant類型,用於指向在圖像中創建這個新對象的對象。

Elephant類還有一個名爲HasTrunk的其他屬性,類型爲bool

所以:

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

,我們有

List<Elephant> herd 

我想有一個LINQ查詢將返回有誤HasTrunk財產的任何大象也有ClonedFrom屬性等於到HasTrunk屬性設置爲true的同一列表中的另一Elephant。

因此,例如大象克隆來創建新的大象B和C

B和C牛羣列表都存在。 B hasTrunk設置爲false,而C hasTrunk設置爲true。

我想返回B.

+0

*我想有一個LINQ查詢... *如果你在某個地方卡住了,寫一個來到這裏。 – 2014-10-04 16:24:42

回答

1
var results = herd.Where(e => !e.HasTrunk 
          && e.ClonedFrom != null 
          && e.ClonedFrom.HasTrunk 
          && herd.Contains(e.ClonedFrom)); 
+0

我不確定那是否回答我的問題。我編輯了我原來的帖子,試圖讓它更加清楚我準確查找的內容。 – Sperick 2014-10-04 11:21:40

+0

您的查詢看起來像是在搜索以確保原始對象位於列表中(上例中的A)。但這並不重要。 – Sperick 2014-10-04 11:36:17

+0

@Sperick因爲你原來的聲明聽起來像是需要確保它在列表中:「... ...還有一個」ClonedFrom「屬性等於**在同一列表中的另一個大象**」。無論如何,如果你不需要它,只需從這個答案中劃掉最後一個檢查 – har07 2014-10-04 11:44:40

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; 
相關問題