2015-08-17 13 views
1

Я использовал структуру сущности с моим примером. Я хотел бы фильтровать дочерний объект, но я получаю исключение. В выражении «Включить путь» должно быть указано свойство навигации, определенное для типа. Используйте пунктирные пути для ссылки навигационных свойств и Выбор оператора для сбора навигационных свойств.Фильтрация запроса элементом дочернего объекта

public List<Notification> GetNotificationBySentDate(DateTime? dateTime) 
    { 
     if (dateTime == null) 
     { 
      return 
       _dbContext.Notifications.Include(x => x.Attachments.Select(a=>a.Clean==true)) 
        .Where(x => 
         x.Sent == null && 
         x.FaultCount <= _appSettingsHelper.NotificationsFaultCountLimit && 
         DbFunctions.AddSeconds(x.CreatedDate, x.DelaySeconds) < DateTime.UtcNow) 
        .OrderBy(a => DbFunctions.AddSeconds(a.CreatedDate, a.DelaySeconds)) 
        .Take(_appSettingsHelper.NotificationsBySentStateSelectTop).ToList(); 
     } 
     return _dbContext.Notifications.Include(x => x.Attachments).Where(x => x.Sent >= dateTime) 
      .OrderBy(a => a.CreatedDate) 
      .Take(_appSettingsHelper.NotificationsBySentStateSelectTop).ToList(); 
    } 

Любая помощь будет очень признательна. Благодарю.

+0

Посмотрите на эту http://stackoverflow.com/questions/31589645/entity-framework-filter-navigation-properties-does-not-work/31591929#31591929 – Eldho

ответ

0

Похоже, что проблема связана с операцией Select под номером Include. Вы можете попытаться удалить его и добавить дополнительный пункт в Where, что-то вроде && x.Attachements.Clean == true. Таким образом, ваш код будет

   _dbContext.Notifications.Include(x => x.Attachments) 
       .Where(x => 
        x.Sent == null && 
        x.FaultCount <= _appSettingsHelper.NotificationsFaultCountLimit && 
        DbFunctions.AddSeconds(x.CreatedDate, x.DelaySeconds) < DateTime.UtcNow && 
        x.Attachments.Clean == true) 
       .OrderBy(a => DbFunctions.AddSeconds(a.CreatedDate, a.DelaySeconds)) 
       .Take(_appSettingsHelper.NotificationsBySentStateSelectTop).ToList(); 
+0

Это будет дайте мне уведомления только тогда, когда вложения чистые. Мое требование - мне нужны все уведомления, если есть какие-либо вложения в уведомления, а затем получить только те, которые чисты – 62071072SP

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