2016-05-31 5 views
0

私は他のオブジェクト(List)のリストを含むオブジェクト(object1)を持っています。 リストに特定のオブジェクト(Object2)が含まれているかどうかを確認するにはどうすればいいですか?そうであれば、最初のオブジェクト(object1)はどのように返しますか?Listプロパティ内に値を持つオブジェクトを返します

明確化

ドメインクラスのためのいくつかのコード:

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

なぜこれを行うには良い方法があると思いますか?しかし、これは代わりにreview.stackexchange.comに行くべきです。 – HimBromBeere

+0

私はほぼ間違いなくダブルループを使用していたので、私はLinqを使うことができました –

+1

LINQは基本的にはダブルループでもありますので、ダブルネストループは常に悪いことではありません。 – Anthony

答えて

3

は、ここでのLINQでそれを行う方法は次のとおりです。

parents.FirstOrDefault(p => p.Kids.Any(k => k.KidId == kidId)); 

「私に与えられたIDを持つすべての子供を持っている最初の親を与える」私はまた、あなたの最初のクエリ(Kid kid = ...)があることに注意します結果を使用しないので不要です。

+0

チャームのように働いた!どうもありがとう! –

1

あなたはSelectManyを使用してIEnumerablesのIEnumerableをを平らにすることができます

public Parent FindByKid(int kidId) 
    { 
     var kid = parents.SelectMany(p => p.Kids).FirstOrDefault(k => K.KidId == kidId); 

     return kid == null ? null: kid.Parent; 

    } 

私はタイプミスや書式設定の問題について謝罪ので、私の携帯電話によ。

関連する問題