我有一个对象:
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的对象?
答案 0 :(得分: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 :(得分:8)
var item = collectionMyObject.FirstOrDefault(x => x.Id == 2);
编辑:我误解了这个问题,所以安德烈的答案看起来比我的好。
答案 2 :(得分:2)
简单:
var obj = collectionMyObject.FirstOrDefault(o => o.Id == 2);
答案 3 :(得分:1)
另一种方式可能是:
(from c in collection where c.Id == 2 select c).ToList;
它应该给出一个列表作为回报。如果想要一个条目,请将ToList()
替换为FirstOrDefault()
。
希望它有所帮助。
答案 4 :(得分:0)
使用Where
关键字和lambda,如下所示:
MyObject result = collectionMyObject.Where(x => x.Id == 2).FirstOrDefault()
或者,要在Items
子集中找到,只需执行以下操作:
MyObject result = collectionMyObject.Where(x => x.Item.Id == 2).FirstOrDefault()