2011-04-28 9 views
1

にLINQを使用して親の未知の量を取得します。次を考えるとSQL

public class Person 
{ 
    public int PersonId { get; set; } 
    public int? ParentId { get; set; } 
} 

は、私は次のツリー構造(PERSONID - のParentID)を持っていると仮定します。

1 - null 
    2 - 1 
    3 - 2 
    4 - 1 

は、どのように私はすべての親を取得することができますPersonIDの3、または2,1のLINQ to SQLクエリを使用していますか?

注:null ParentIdはあなたがループ(または再帰の他のフォームを)必要があります、トップレベルの人

+0

再帰のようなサウンド。あなたはSqlの土地でCTEを使ってそのようなことをしますが、それはLinq2Sqlにとっては複雑すぎると思います。 procを作りたいかもしれない。 – Tejs

+0

[階層問題 - >再帰をLinq結合で置き換えますか?](http://stackoverflow.com/questions/1435229/hierarchy-problem-replace-reursion-with-linq-join) – ChrisF

+0

@Chris:それは異なる種類の問題。これは階層の子孫を検索しますが、これは先祖を検索します。 –

答えて

2

を示しています。

var personId = 3 as int?; 
var result = new List<Person>(); 
do 
{ 
    var person = context.Persons.Single(p => p.PersonId == personId.Value); 
    result.Add(person); 
    personId = person.ParentId; 
} while (personId != null); 
// all ancestors are in `result` 
+0

あなたはそれを行う方法を知っていますか? http://stackoverflow.com/questions/5859520/get-unknown-amount-of-childen-using-linq-to-sql –

+0

@Brian:概念は同じです。出発人を連れて親に行くのではなく、子供に行く必要があります。この場合、親の人が対象者であることが必要です。次に、これらの人々のそれぞれに対して、繰り返す。 –

関連する問題