2009-08-14 6 views
0

J'ai une table appelée Quiz qui ont ces champsUtilisez LINQ pour obtenir des objets parents basé sur l'un des biens dans une table de référencement auto

id As Int 
created As DateTime 
header As Sring 
body As String 
fk_parent As int 
url As String 

Tous les éléments sans clé parent serait la question, et les qui ont la clé parentale serait la réponse. J'ai le problème d'obtenir toutes les dernières questions actives (basées à la fois sur les questions créées temps et réponse temps créé).

J'ai du mal à écrire une requête Linq qui peut faire la tâche ci-dessus.

Répondre

0

est ici un début:

IQueryable<int> keys = 
    from x in dc.Quiz 
    let masterID = ParentId.HasValue ? ParentId.Value : Id 
    group x by masterID into g 
    order g by g.Max(x => x.created) descending 
    select g.Key 

List<Quiz> = dc.Quiz.Where(x => keys.Take(20).Contains(x.Id)).ToList(); 

Cela suppose des réponses ne sont pas les parents de réponses ... S'ils peuvent - vous une promenade d'arbre de profondeur arbitraire sur vos mains, ce qui est un clou mal en forme pour Linq et pour SQL.

+0

Je pense que c'est la bonne approche, et j'ai essayé de combiner les deux commandes en un comme ceci: de x dans dc.Quiz let masterID = ParentId.HasValue? ParentId.Value: Id groupe x par MASTERID en g ordre g par g.Max (x => x.created) diminuant de sélection (nouveau {} = masterItem de x en g où x.parentid = null} Le Le problème est que, j'ai les valeurs de retour avec réponse et des questions dans des groupes séparés, la réponse à une question n'est pas dans le même groupe que la question.Je sais que c'est presque la, creuser. – tuanvt

0

Vous pouvez essayer de rejoindre la table sur elle-même dans LINQ et la création d'un nouvel objet qui contient les Questions et réponses:

var QandA = from q in tbl 
     join a in tbl on q.id equals a.fk_parent 
     select new { 
     QHeader = q.header, 
     QBody = q.body, 
     QUrl = q.url, 
     AHeader = a.header, 
     ABody = a.body, 
     AUrl = a.url 
     }; 

Je pense que c'est ainsi que votre table est en place, mais je pourrais avoir la jonction mal .

Questions connexes