如何使用Linq在列表中查找对象

本文关键字:查找 对象 列表 何使用 Linq | 更新日期: 2023-09-27 18:20:28

我有一个对象:

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

如何在collectionMyObject with Linq中找到Id为2的对象?

如何使用Linq在列表中查找对象

如果您试图在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);
var item = collectionMyObject.FirstOrDefault(x => x.Id == 2);

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

简单:

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

另一种方法可能是:

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

它应该给出一份清单作为回报。如果需要一个条目,则将ToList()替换为FirstOrDefault()

希望能有所帮助。

使用Where关键字和类似的lambda:

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

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

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