2015-04-23 10 views
4

У меня есть объект ticket, который имеет ticketNotes (от 0 до многих) и хотел бы отбросить детали пользователя для тех, кто создал каждую заметку при запросе билетов.Entity Framework query для включения дочерних объектов коллекции объектов

Я использую следующий код для запроса билета

var ticket = (from t in context.Tickets 
.Include(t=>t.Site) 
.Include(t=>t.Caller) 
.Include(t=>t.Caller.Site) 
.Include(t => t.Notes) 
.Include(t=>t.OpenedByUser) 
select t).First(t => t.TicketId == ticketId); 

Моего TicketNote класса:

public class TicketNote 
{ 
    public Guid TicketNoteId { get; set; } 
    public string NoteText { get; set; } 
    public DateTime CreatedTime { get; set; } 
    public Guid TicketId { get; set; } 
    public virtual Ticket Ticket { get; set; } 
    public bool ReadOnly { get; set; } 
    public DateTime? DateTimeDeleted { get; set; } 
    public Guid TenantId { get; set; } 

    [Required] 
    [DefaultValue(typeof(Guid), "00000000-0000-0000-0000-000000000000")] 
    public Guid CreatedByUserId { get; set; } 
    [ForeignKey("CreatedByUserId")] 
    public virtual User CreatedByUser { get; set; } 
} 

Я хотел бы добавить

.Include(t => t.Notes.CreatedByUser)

Однако, как ноты в коллекции у меня нет выбора.

Просьба сообщить наилучший подход к достижению отброса Созданного пользователя, который на данный момент является NULL.

Благодаря

+0

Не уверен, что 'Any()' будет работать здесь - '.Include (t => t.Notes.Any(). CreatedByUser)'? – Kami

+0

Привет, спасибо, я просто попробовал это, но у меня нет никаких сущностей после того, как он не работает. –

+0

Возможно, эта статья поможет вам: [link] (http://www.codeproject.com/Articles/788559/Loading-Related-Entities-with-Entity-Framework-A-B). Особенно детали, касающиеся явной загрузки. – sszarek

ответ

2

Вы можете включать более сложные оператор, чтобы получить в многоуровневых коллекциях. Попробуйте выполнить следующие действия:

.Include(t => t.Notes.Select(n => n.CreatedByUser)) 
+0

Отлично! –

0

Вы ticket переменных, которые имеют свойство Notes внутри него. Для выполнения вы можете использовать

ticket.Notes.Select(t => n.CreatedByUser) 
+0

Можете ли вы посоветовать, как использовать это при возврате билета? Я возвращаю объект билета в моем репозитории, поэтому не могу вызывать выбор позже, когда контекст закрыт. –

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