我有一个对象(object1),其中包含其他对象列表(List)。 如何检查列表是否包含特定对象(Object2),如果包含,则如何返回第一个对象(object1)?
一些澄清的代码
域类:
public class Parent
{
public int ParentId { get; set; }
public virtual IList<Kid> Kids { get; set; } //This is the list
//Unimportant code
public virtual IEnumerable<Adres> Adressen
{ get; set; }
public virtual IEnumerable<string> Emails { get; set; }
public virtual IEnumerable<string> Telefoonnummers { get; set; }
public Ouder()
{
Kinderen = new List<Lid>();
Adressen = new List<Adres>();
}
}
public Parent FindByKid(int kidId)
{
Kid kid = kids.FirstOrDefault(l => l.KidId == kidId);
foreach(Parent parent in parents)
{
foreach(Kid kid in parent.Kids)
{
if(kid.KidId == kidId)
{
return parent;
}
}
}
return null;
}
正如你所看到的,我已经想出了办法。但我认为必须以更好的方式做到这一点。我尝试使用Linq,但我无法提供有效的解决方案。
答案 0 :(得分:3)
以下是如何使用Linq:
parents.FirstOrDefault(p => p.Kids.Any(k => k.KidId == kidId));
“给我第一个拥有给定ID的孩子的父母”
我还要注意,您的第一个查询(Kid kid = ...
)是不必要的,因为您没有使用结果。
答案 1 :(得分:1)
您可以使用SelectMany压缩IEnumerable IEnumebles:
public Parent FindByKid(int kidId)
{
var kid = parents.SelectMany(p => p.Kids).FirstOrDefault(k => K.KidId == kidId);
return kid == null ? null: kid.Parent;
}
我在手机上对于拼写错误或格式化问题表示歉意。