2011-12-30 83 views
0

我在我的倉庫下面的代碼:EF代碼優先選擇基於許多行一對多的關係

public PagedResult<Post> GetAllPublishedByTag(int tagId, int start, int max) 
{ 
    var query = Database.Set<Post>().Where(p => p.IsPublished) 
            .OrderByDescending(p => p.CreatedAt) 
            .Skip(start) 
            .Take(max); 

    int total = query.Count(); 
    var result = query.ToList(); 

    return new PagedResult<Post>(result, total); 
} 

這會給我發佈的所有職位。但我想要的是爲某個標籤選擇所有發佈的帖子。我的模型的設置方式是標籤與帖子之間有多對多的關係。我想稍微修改上面的代碼,但是這並不工作:

public PagedResult<Post> GetAllPublishedByTag(Tag tag, int start, int max) 
{ 
    var query = Database.Set<Post>().Where(p => p.Tags.Contains(tag) && p.IsPublished) 
            .OrderByDescending(p => p.CreatedAt) 
            .Skip(start) 
            .Take(max); 

    int total = query.Count(); 
    var result = query.ToList(); 

    return new PagedResult<Post>(result, total); 
} 

我寧願在標籤識別通過(按第一個代碼示例),而不是標籤對象,但不知道如何正確地寫LINQ聲明。

回答

1
var query = Database.Set<Post>().Where(p => p.Tags.Any(t => t.Id == tagId) && p.IsPublished) 
.OrderByDescending(p => p.CreatedAt) 
.Skip(start) 
.Take(max); 

側注:我相信你可能有你的分頁問題,​​因爲變量總計是在skip/take被調用後計算的。

相關問題