如何在Linq中找到列表中的对象?

Ale*_*ndr 7 c# linq windows-phone-7

我有一个对象:

public class MyObject 
    {
        public int Id { get; set; }     
        public List<MyObject> Items { get; set; }     
    }
Run Code Online (Sandbox Code Playgroud)

我有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
});
Run Code Online (Sandbox Code Playgroud)

如何使用Linq在collectionMyObject中找到Id = 2的对象?

And*_*rei 14

如果您正在尝试查找collectionMyObject其中包含ID为2的项的对象,那么这应该有效:

MyObject myObject = collectionMyObject.FirstOrDefault(o => o.Items != null && o.Items.Any(io => io.Id == 2));
Run Code Online (Sandbox Code Playgroud)

如果您尝试查找ID为2的内部项,那么此查询SelectMany可能会有所帮助:

MyObject myObject1 = collectionMyObject.Where(o => o.Items != null).SelectMany(o => o.Items).FirstOrDefault(io => io.Id == 2);
Run Code Online (Sandbox Code Playgroud)


ore*_*rel 8

var item = collectionMyObject.FirstOrDefault(x => x.Id == 2);
Run Code Online (Sandbox Code Playgroud)

编辑:我误解了这个问题所以安德烈的答案看起来比我的好.