2010-03-10 8 views
0

Salut, j'ai 2 tables Blogpost et BlogCommentssélectionner uniquement certains articles de table liée LINQ

Je veux obtenir tous les BlogPosts qui ont un état de « publié ». et obtenez tous les BlogComments pour chaque publication dont l'état est "publié".

Im en utilisant quelque chose comme ça pour obtenir les blogposts:

var BlogPosts = (from p in db.BlogPosts where p.State == State.Published select p).ToArray(); 

mais en raison de la relation avec BlogComments il a autiomatically tous les BlogComments (publiées et non publiées).

Comment puis-je obtenir les commentaires « publiés » pour chacun des blogposts (à savoir les celles approuvées)

grâce

+0

Linq2SQL ou Entités? – Alxandr

Répondre

4

Essayez de sélectionner une nouvelle BlogPostViewModel, un convertisseur analogique BlogPost mais avec un IEnumerable<BlogComment> à la place, avec juste les données de blog et une collection de commentaires publiés.

select new BlogPostViewModel { 
     Title = p.Title, 
     Body = p.Body, 
     Comments = p.Comments.Where(c => c.Published); 
    }); 

BlogPostViewModel est:

public class BlogPostViewModel 
{ 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public IEnumerable<BlogComment> Comments { get; set; } 
} 
+0

ive essayé ce ... retour (de p dans db.BlogPosts où p.State == State.Published sélectionnez Nouveau BlogPost { Titre = p.title, Body = p.Body, BlogComments = p. BlogComments.Where (c => c.State == State.Published) }). ToArray(); mais obtenir ne peut pas convertir IEnumerable EntitySet ... :( – raklos

+0

Le je suggère un type de ViewModel distinct qui est un analogue à BlogPost qui a les commentaires comme 'IEnumerable ' – tvanfosson

+0

Puis-je changer juste le EntitySet privé _BlogComments; champ dans un ineumerable dans le fichier designer.cs? – raklos

0
var BlogPosts = from p in db.BlogPosts where p.State == State.Published select new { 
    Post = p, 
    Comments = (from c in db.BlogComments where c.State == State.Published && c.Post = p select c) 
}; 
0
var publishedComments = db.BlobPosts.Where(p => p.State == State.Published) 
            .SelectMany(p => p.Comments) 
            .Where(c => c.State == State.Published); 

Désolé pour ne pas utiliser la syntaxe de requête. Avec un peu de chance, cela vous mettra sur la bonne voie.

Questions connexes