2015-01-21 91 views
0

我有一個名爲Renders的模型。獲取具有特定屬性值的ICollection的實體數

public class Render 
{ 
    public int RenderId { get; set; } 
    public string ClientName { get; set; } 
    public string Title { get; set; } 

    public ICollection<Comment> Comments { get; set; } 
} 

而且在渲染實體評論的集合,它的型號看起來像這樣:

public class Comment 
{ 
    public int CommentId { get; set; } 

    [Column(TypeName = "varchar(Max)"), DataType(DataType.MultilineText)] 
    public string UserComment { get; set; } 
    public bool CommentApproved { get; set; } 

    public int RenderId { get; set; } 
    public virtual Render Render { get; set; } 

    public virtual ICollection<CommentImage> CommentImages { get; set; } 
} 

我需要一個Count()的所有呈現有任何意見與屬性CommentApproved那等於true。

這是我所嘗試過的,但它不起作用,因爲選擇方法,我有種得到爲什麼不起作用,但它是我唯一能夠弄清楚如何編寫,實際上編譯。

private readonly RenderLibContext _db = new RenderLibContext(); 
.... 
var commented = _db.Renders.Include("Comments") 
        .Select(r => r.Comments.Where(c => c.CommentApproved) 
        .Count()); 

顯然,在我的控制器其他一些代碼,但我想這個問題保持到了點。我只是無法弄清楚如何讓Count()方法起作用,並告訴我有多少個Renders具有ApprovedComment屬性爲true的註釋。

回答

2

在這裏你去,

var count = _db.Renders.Count(render => render.Comments.Any(c => c.CommentApproved)); 
+0

這看起來不錯,我認爲我的努力有點太硬..大聲笑現在重新編譯和測試。 – 2015-01-21 12:51:14

+0

Booyah! Jeez我甚至把我的問題與你在這裏所做的相同。關鍵字.... ANY()!!! – 2015-01-21 12:51:58

+1

Linq是最好的。簡單起見, – 2015-01-21 12:54:12

1

我想這可能工作:

var commented = _db.Renders.Include("Comments") 
       .Where(c => c.CommentApproved) 
       .Count()); 

Select沒有必要在這裏我想

+0

這個解決方案給了我一個編譯器錯誤:「不明確的調用「它假設你的lambda c值是一個渲染。 – 2015-01-21 12:35:59

+0

這與我剛開始使用的地方非常相似:'_db.Renders.Include(「Comments」)。Count(r => r.Comments.Where(c => c.CommentApproved));'哪些不起作用,但我認爲這將是正確的做法。 – 2015-01-21 12:38:52

+0

那麼,你可以使用'SelectMany'而不是'Include',因此後者不會進行類型檢查。 – HimBromBeere 2015-01-21 12:49:56

相關問題