2015-01-21 4 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; } 
} 

И коллекция Комментарии в том, что Рендер Entity, это модель выглядит так:

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; } 
} 

Мне нужно, чтобы получить граф() всех Визуализирует, которые имеют какие-либо комментарии с собственностью CommentApproved, что равно true.

Это то, что я пробовал, но он не работает из-за метода Select, и я как бы понимаю, почему это не работает, но это единственное, что я мог бы понять, как писать, что на самом деле компиляции.

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

Очевидно, что в моем контроллере есть какой-то другой код, но я хотел бы поставить вопрос в точку. Мне просто сложно понять, как я могу заставить этот метод Count() работать и сказать, сколько у Renders есть Комментарии, в которых свойство ApprovedComment истинно.

ответ

2

Здесь вы идете,

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

Это выглядит правильно, я думаю, что мой пытался слишком сильно .. lol Перекомпиляция и тестирование сейчас. –

+0

Booyah! Боже, у меня даже был мой вопрос, структурированный так же, как ты здесь. Ключевое слово .... ЛЮБОЙ() !!! –

+1

Linq лучший. Сделай это проще, –

1

Я думаю, что это может работать:

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

Select не нужен здесь, я думаю,

+0

Это решение дает мне ошибку компилятора: «Неоднозначность вызова «он предполагает, что ваше значение lambdas c - это рендер. –

+0

Это очень похоже на то, где я начинал: '_db.Renders.Include (« Комментарии »). Count (r => r.Comments.Where (c => c.CommentApproved));' который не работает, но Я предполагал, что это правильный способ сделать это. –

+0

Ну, вы можете использовать 'SelectMany' вместо' Include', поэтому последний не проверяет тип. – HimBromBeere

 Смежные вопросы

  • Нет связанных вопросов^_^