2016-04-18 13 views
1

ich Entity Framework-Code Zuerst bin mit, und ich habe die folgenden Objekte in meinem Modell:Abrufen von Objekten aus vielen zu vielen Beziehung

public class Category { 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity), Key] 
    public int CategoryId { get; set; } 

    [Required, MaxLength(128), Index(IsUnique = true)] 
    public string CategoryName { get; set; } 

    public string Description { get; set; } 

    public virtual ICollection<Article> Articles { get; set; } 
} 

public class Article { 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity), Key] 
    public int ArticleId { get; set; } 

    [Required, MaxLength(128), Index] 
    public string ArticleName { get; set; } 

    public string Description { get; set; } 

    public virtual ICollection<Category> Categories { get; set; } 
} 

ich eine Methode in meinem Data Access Layer Umsetzung aller Articles abrufen dass in einer der ausgewählten Categories:

IEnumerable<Article> GetArticles(int[] categoryIds); 

Mein Problem: Wie erstelle ich den Abfrageausdruck? Wenn ich in SQL tun dies, würde ich eine Abfrage wie folgt schreiben:

SELECT a.* 
FROM Articles a 
JOIN ArticlesInCategories AS aic ON a.ArticleId = aic.ArticleId 
JOIN Categories AS c on aic.CategoryId = c.CategoryId 
WHERE c.CategoryId IN (. . .) 

Also das bedeutet ich dies so schreiben würde?

return (from a in context.Articles 
     join c in context.Categories ON a.CategoryId = c.CatgegoryId 
     where categoryIds.Contains(c.CategoryId)); 

Das einzige Problem ist, dass die Article Klasse keine CategoryId Eigenschaft hat.

Wie erstelle ich diese Abfrage?

Antwort

1

Sie benötigen eine Abfrage umkehren und verwenden SelectMany():

return (from c in context.Categories 
     where categoryIds.Contains(c.CategoryId)) 
     .SelectMany(category => category.Arcticles); 
Verwandte Themen