2013-07-01 56 views
5

我有一個目標:如何在Linq中查找列表中的對象?

public class MyObject 
    { 
     public int Id { get; set; }  
     public List<MyObject> Items { get; set; }  
    } 

而且我的MyObject的名單:

List<MyObject> collection = new List<MyObject>(); 

collection.Add(new MyObject() 
{ 
    Id = 1, 
    Items = null 
}); 

collection.Add(new MyObject() 
{ 
    Id = 2, 
    Items = null 
}); 

collection.Add(new MyObject() 
{ 
    Id = 3, 
    Items = null 
}); 


List<MyObject> collectionMyObject = new List<MyObject>(); 

collectionMyObject.Add(new MyObject() 
{ 
    Id = 4, 
    Items = collection 
}); 

collectionMyObject.Add(new MyObject() 
{ 
    Id = 5, 
    Items = null 
}); 

我怎樣才能找到ID = 2的對象在collectionMyObject使用LINQ?

回答

13

如果你正在努力尋找在collectionMyObject對象具有項ID爲2,那麼這應該工作:

MyObject myObject = collectionMyObject.FirstOrDefault(o => o.Items != null && o.Items.Any(io => io.Id == 2)); 

如果你是嘗試與ID爲2,那麼這個查詢找到一個內部項目與SelectMany可能會有所幫助:

MyObject myObject1 = collectionMyObject.Where(o => o.Items != null).SelectMany(o => o.Items).FirstOrDefault(io => io.Id == 2); 
+1

感謝您的回答!我有點糾正查詢,它的工作原理Where(s => s.Items!= null).SelectMany(o => o.Items).FirstOrDefault(io => io.Id == 2); – Alexandr

+0

@Alexandr,更新了考慮到空值的答案。 – Andrei

+0

好的,謝謝! :) – Alexandr

1

使用Where關鍵字,像這樣一個lambda:

MyObject result = collectionMyObject.Where(x => x.Id == 2).FirstOrDefault() 

或者,Items子集在尋找簡單地做:

MyObject result = collectionMyObject.Where(x => x.Item.Id == 2).FirstOrDefault() 
+3

也許'FirstOrDefault'更好,因爲它們看起來很獨特。 –

2

簡單:

var obj = collectionMyObject.FirstOrDefault(o => o.Id == 2); 
8
var item = collectionMyObject.FirstOrDefault(x => x.Id == 2); 

編輯:我m已經讀過這個問題,所以Andrei的回答看起來比我的好。

+0

感謝您的回答!我可能提出了我腦海中的錯誤問題,即搜索Items。 – Alexandr

1

另一種方式可能是:

(from c in collection where c.Id == 2 select c).ToList;

它應該給出一個列表作爲回報。如果想要單個條目,則將ToList()替換爲FirstOrDefault()

希望它有幫助。

相關問題