C# 返回在列表属性中具有值的对象
我有一个对象(object1),其中包含其他对象的列表(list)。 如何检查列表是否包含特定对象(Object2),如果包含,如何返回第一个对象(object1) 一些代码需要澄清 域类:C# 返回在列表属性中具有值的对象,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个对象(object1),其中包含其他对象的列表(list)。 如何检查列表是否包含特定对象(Object2),如果包含,如何返回第一个对象(object1) 一些代码需要澄清 域类: public class Parent { public int ParentId { get; set; } public virtual IList<Kid> Kids { get; set; } //This is the list //Unimportant
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;
}
公共类父类
{
public int ParentId{get;set;}
公共虚拟IList子对象{get;set;}//这是列表
//不重要代码
公共虚拟可数地址
{get;set;}
公共虚拟IEnumerable电子邮件{get;set;}
公共虚拟IEnumerable Telefoonnummers{get;set;}
公共图书馆
{
Kinderen=新列表();
Adressen=新列表();
}
}
公共父FindByKid(int kidId)
{
Kid=kids.FirstOrDefault(l=>l.KidId==KidId);
foreach(父对象中的父对象)
{
foreach(父母中的孩子。孩子)
{
如果(kid.KidId==KidId)
{
返回父母;
}
}
}
返回null;
}
正如你所看到的,我已经想出了一个办法。但我认为必须有一种更好的方法来做到这一点。我尝试使用Linq,但无法提供有效的解决方案。以下是如何使用Linq:
parents.FirstOrDefault(p => p.Kids.Any(k => k.KidId == kidId));
“给我第一个拥有给定ID的孩子的父母”
我还想指出,您的第一个查询(
Kid-Kid=…
)是不必要的,因为您不使用结果。以下是如何使用Linq:
parents.FirstOrDefault(p => p.Kids.Any(k => k.KidId == kidId));
“给我第一个拥有给定ID的孩子的父母”
我还想指出,您的第一个查询(
Kid Kid=…
)是不必要的,因为您不使用结果。您可以使用SelectMany展平IEnumerable中的IEnumerable:
public Parent FindByKid(int kidId)
{
var kid = parents.SelectMany(p => p.Kids).FirstOrDefault(k => K.KidId == kidId);
return kid == null ? null: kid.Parent;
}
我正在打电话,因此对于输入错误或格式问题,我深表歉意。您可以使用SelectMany展平IEnumerable中的IEnumerable:
public Parent FindByKid(int kidId)
{
var kid = parents.SelectMany(p => p.Kids).FirstOrDefault(k => K.KidId == kidId);
return kid == null ? null: kid.Parent;
}
我正在打电话,所以对于打字错误或格式问题,我深表歉意。为什么你认为有更好的方法来解决这个问题?但是,这应该转到review.stackexchange.com。因为我使用了双循环,而我几乎可以肯定我可以使用LINQ。请注意,LINQ基本上也只是做了一个双循环-所以它不像双嵌套循环总是一件坏事。正如我之前提到过一千次:LINQ不是一个神奇的循环简化器,这只是同一事物的另一种语法。因此,当使用LINQ时,你所做的就是隐藏逻辑的复杂性,这基本上并不总是一件好事。为什么你认为有更好的方法来做到这一点?但是,这应该转到review.stackexchange.com。因为我使用了双循环,而我几乎可以肯定我可以使用LINQ。请注意,LINQ基本上也只是做了一个双循环-所以它不像双嵌套循环总是一件坏事。正如我之前提到过一千次:LINQ不是一个神奇的循环简化器,这只是同一事物的另一种语法。因此,当使用LINQ时,您所做的只是隐藏逻辑的复杂性,这基本上并不总是一件好事。工作起来很有魅力!谢谢!工作得很有魅力!谢谢!