Как считать элементы во вложенной коллекции / codefirst EntityFramework - PullRequest
3 голосов
/ 27 ноября 2011

У меня есть коллекция CodeFirst, определенная как определено ниже.

Для любого заданного EmailOwnerId я хочу подсчитать количество существующих записей EmailDetailAttachments без фактической загрузки всех самих изображений.

Iзнаю, что я могу сделать что-то вроде

var emailsToView = (from data in db.EmailDetails.Include("EmailDetailAttachments")
                        where data.EmailAccount.EmailOwnerId = 999
                        select data).ToList();
int cnt = 0;    
foreach (var email in emailsToView)
{
     cnt += email.EmailDetailAttachments.Count();
}

, но это означает, что я уже загрузил все байты изображений с моего удаленного сервера.

Любое предложение будет оценено.

public class EmailDetail
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int EmailOwnerId {get;set;}

    public virtual ICollection<ImageDetail> EmailDetailAttachments { get; set; }
    ..
}

public class ImageDetail
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [MaxLengthAttribute(256)]
    public string FileName { get; set; }

    [MaxLengthAttribute(256)]
    public string ContentMimeType { get; set; }

    public byte[] ImageDataBytes { get; set; }
    public DateTime ImageCreation { get; set; }
}

1 Ответ

4 голосов
/ 27 ноября 2011

Движок должен иметь возможность обновить его до оператора COUNT(*).

  var emailsToView = (from data in db.EmailDetails  // no Include
                    where data.EmailAccount.EmailOwnerId = 999
                    select new { 
                      Detail = data, 
                      Count=data.EmailDetailAttachments.Count() }
                     ).ToList();

Но вам нужно проверить, дает ли это правильный (и более эффективный) SQL.

...