2009-08-20 13 views
1

これはわかりません。 Employee withとIdフィールドというテーブルがあります。テーブルには、従業員のIDフィールドを指す外部キーを持つManagerIdフィールドも含まれています。エンティティとしてテーブルをエンティティデータモデルに追加すると、EmployeeChildrenコレクション要素とEmployeeParent要素を持つ新しいEmployeeエンティティが作成されます。私はすべての従業員を取得し、従業員のエンティティの完全な新しいインスタンスに入れることができます。従業員エンティティには多くの子があり、各子エンティティには複数の子があり、それぞれには親に戻るポインタがあります。Linq to Entities - ストアドプロシージャから「自己参照」を持つエンティティを取得します。

私が今必要とするのは、ストアドプロシージャを使用している従業員のサブセットを取得することです。今のところ、2人以上の従業員John Doeを検索すると、ストアドプロシージャは3行を返します。

社員マネージャーID名

1ヌルビル

2 1ジェーン

3 2ここではジョン・ドウ

は、検索を行うには、私のコードです:

using (var entity = new TimeEntryEntities()) 
    { 

     var employees = 
       from E in entity.EmployeeSearch(search) 
       orderby E.Name 
       select E; 


     return employees.ToList<Employee>(); 
    } 

右今、このコードは3つの別個のエンティティを返します。どうやって1つのグループにまとめることができますか?

+0

ストアドプロシージャを使用しない場合、これは期待どおりに機能しますか? LINQクエリを使用して1人の従業員を直接取得する場合は、「マネージャ」と「レポート」のコレクションが必要なように配置されていますか? –

+0

それは動作しますが、私はそれが必要な方法で戻ってくることはありません。それは従業員を検索し、そのエンティティは親エンティティを持ちます。親エンティティは親と子を持ちます。私はトップレベルの親ではなく、低レベルの子供で始めることが必要です。私はそれが理にかなったことを願う –

答えて

0

階層を平坦化しようとしているように、1つのレコードだけが返されます。たぶん、ストアドプロシージャ内の共通テーブル式(CTE)が役立ちます。 Here is an alternate of a similar requestを:

またanother example with more detail(しかし、あなたが自由のために登録する必要があり):

+0

私は3行を返すプロシージャでCTEを使用しています。それは子供の行を見つけ、次にCTEを使って親を返します。そして、親の親を返します。これにより、データベースから3行が返されます。今私はそれらの行を私のEmployeeエンティティに配置する必要があります。私は手動でこれを行う必要がある場合、この場合のエンティティにlinqについて忘れているのだろうかと思います。 –

-1

あなたがEFに興味を持っている唯一のエンティティを返す必要があります。関連するエンティティを自動的に取得します。 自己参照を使用していない場合は視覚化が簡単になりますが、このコンセプトは途方もなく残っています。

関連する問題