9

我有一个对象:

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
});

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

4

5 回答 5

17

如果您正在尝试查找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);
于 2013-07-01T09:40:01.123 回答
9
var item = collectionMyObject.FirstOrDefault(x => x.Id == 2);

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

于 2013-07-01T09:38:51.477 回答
3

简单的:

var obj = collectionMyObject.FirstOrDefault(o => o.Id == 2);
于 2013-07-01T09:38:39.090 回答
1

另一种方式可能是:

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

它应该给出一个列表作为回报。如果想要一个条目,则替换ToList()FirstOrDefault().

希望能帮助到你。

于 2013-07-01T10:16:33.297 回答
0

像这样使用Where关键字和 lambda:

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

或者,要在Items子集合中查找,只需执行以下操作:

MyObject result = collectionMyObject.Where(x => x.Item.Id == 2).FirstOrDefault()
于 2013-07-01T09:38:00.850 回答