2017-02-07 1 views
0

j'ai les suivantes deux classes:Chargement des entités liées à LINQ

Auteur classe:

public class Author 
{ 
    public Author() 
    { 
     this.Books = new List<Book>(); 
    } 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime DOB { get; set; } 
    public virtual ICollection<Book> Books { get; set; } 
} 

et la classe du livre:

public class Book 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public DateTime DatePublished { get; set; } 
    public bool IsBorrowed { get; set; } 
    public bool IsOverdue { get; set; } 
    public int AuthorId { get; set; } 
    public virtual Author Author { get; set; } 
} 

Un auteur peut avoir beaucoup de livres. Ce qui me pose problème, c'est le chargement de tous les livres associés à un auteur. Par exemple, j'ai un auteur dans ma base de données avec un ID de 1, je veux retourner tous les livres associés à cet auteur particulier.

Mon processus de pensée était que la meilleure façon de faire est avec LINQ, mais je suis perdu sur la façon de créer correctement une requête LINQ pour ce faire. Pourriez-vous s'il vous plaît me guider sur la meilleure façon d'accomplir cette tâche?

+2

'db.Authors.Find (1) ?. Livres ' –

+0

' var livres = context.Books.Where (b => b.AuthorId == 1); 'Si vous voulez également les informations sur l'auteur:' var auteurAndBooks = context.Authors.Include (a => a.Books) .FirstOrDefault (a => a.Id == 1); ' –

+0

Vous taguez linq-à-sql mais votre classe exemple ne sont pas – Pleun

Répondre

1

Regardez ici https://msdn.microsoft.com/en-us/library/bb397906.aspx .. Voilà une bonne place pour commencer.

Si vous travaillez avec Entity Framework je vais recommander https://msdn.microsoft.com/en-us/library/bb399375(v=vs.110).aspx

Vous devez instancier le contexte de la base de données d'abord, et après que vous pouvez accéder à l'entité spécifiée avec LINQ

var dbContext = new DataContext(); 
var query = from book in dbContext.Books 
where book.AuthorId == 1 
select book; 

Après que vous peut soit obtenir vos résultats dans une boucle foreach (ou tel) ou l'exécution des méthodes

.First(); 

exceptions ou

.FirstOrDefault(); 

sans exception.

+0

Bonne réponse. Clair et concis avec des références. Exactement ce que j'étais après. Merci beaucoup. – Sylvoo

+0

Votre bienvenue et merci pour vos commentaires positifs :) – Joshit

0

Vous devez interroger la table des livres. Quelque chose comme:

IQueryable<Book> books = 
from book in db.Books 
where book.AuthorId == 1 
select book;