返回List属性

时间:2016-05-31 19:12:32

标签: 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 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,但我无法提供有效的解决方案。

2 个答案:

答案 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;

    }

我在手机上对于拼写错误或格式化问题表示歉意。