2016-04-28 12 views
0

私は現在、非常に基本的なWeb APIアプリケーションを作成していますが、データエンティティに関連付けられたコレクションの最初のアイテムを取得したい場合があります。 2つのエンティティ間の1対多の関係を示しラムダ式を使用して子コレクションの最初のアイテムを取得する

class Parent { 
    int ParentId { get; set; } 
    string Name { get; set;} 
    string Description { get; set; } 

    virtual ICollection<Child> Children { get; set; } 
} 

class Child { 
    int ChildId { get; set;} 
    string Name {get; set;} 

    int ParentId { get; set; } 
    Parent Parent {get; set;} 
} 

:例として

、私は以下のPOCOクラスを持っているとしましょう。 DbContextが問題ではなく、他のすべてが正常に動作しているとします。私はの線に沿って何かを実行したいと思います:

「Childrenコレクションの最初のエントリで、すべての親レコードを私を与える」、一言で言えば

DbContext.Parent.Include(d=>d.Children.Take(1)).ToList();

私はこれを取得することはできませんしかし、働くどんな助けでも大歓迎です。

+0

に接続されていない新しいオブジェクトを作成します..which

あなたはしかし、これを行うことができます...

var projection = DbContext.Parent.Include(p => p.Children).Select(p => new Parent { ParentId = p.ParentId, Name = p.Name, Description = p.Description, Children = p.Children.Take(1).ToList() }; 

?最初の子要素を含む最初の親要素を選択しますか? – Mostafiz

+0

私は1つの子レコードを持つすべての親アイテムを返しました。注:私は子供レコード数== 1を持つすべての親アイテムではありません –

+0

あなたはすべての親と各親の最初の子供が欲しいですか?または、あなたはすべての親と唯一の子がすべての親と一緒に反対したい? –

答えて

0

あなたがそれぞれの親の最初の子と一緒にすべての親をしたい場合は、これを使用する:

DbContext.Parent.Include(d => d.Children.FirstOrDefault()).ToList(); 

それとも、あなただけの一人の子供と一緒にすべての親をしたい場合、あなたは1つのクラスを作成する必要があるが、ParentChildなどを言いますこの:

var obj= new ParentChild() 
{ 
    Parents= DbContext.Parent.ToList(), 
    Child= DbContext.Child.FirstOrDefault(), 
} 

Public class ParentChild 
{ 
    ICollection<Parent> Parents { get; set; } 
    Child OneChild {get;set;}   
} 

が今のようにDbContextからこのオブジェクトを取得このオブジェクトobjをアプリケーションで使用します。

+0

ありがとう@manoj私はドメインオブジェクトを構築することができますが、実現できるラムダメソッドが存在するかどうかを知りたいのです –

+0

ラムダメソッドはオブジェクトのコレクションで利用できます。 –

+0

ちょっと@マチュー、私の答えがあなたを助けたら、答えを受け入れ、upvoteしてください。 –

0

DbContextは問題ではなく、他のすべてが正常に動作しているとします。 新しい投影法を作成して、必要なものを達成する必要があるでしょう。

var projection = DbContext.Parent.Include(p => p.Children).Select(p => new { 
    ParentId = p.ParentId, 
    Name = p.Name, 
    Description = p.Description, 
    Child= p.Children.FirstOrDefault() 
}; 

そうでない場合は、保存がデシベルコンテキストに行われることになっていた場合のみ、最初の子を返すために返された親への変更が不要な問題を引き起こす可能性が作ります。実際に何をしたいコンテキスト

+0

これは私が最初に行ったのと似ていますが、もっと良い方法があるかどうかは疑問です。 –

+0

@MatthewMerryfull私はそれを持っていると思います。 'DbContext.Parent.Include(d => d.Children.Take(1).ToList())。ToList();'。子供たちは 'ICollection'ですが、私は' Take'が 'ICollectoion'を返すとは思いません。試してみてください。私は私の答えを更新します。 – Nkosi

関連する問題