Я создаю репозиторий и уровень служб в моем приложении, и мой repo имеет очень простую функцию
Public Function GetRegions() As IQueryable(Of Region) Implements IRegionRepository.GetRegions
Dim region = (From r In dc.Regions
Select r)
Return region.AsQueryable
End Function
Теперь на моем Уровне служб у меня есть функция как это
Public Function GetRegionById(ByVal id As Integer) As Region Implements IRegionService.GetRegionById
Return _RegionRepository.GetRegions().Where(Function(r) r.ID = id).FirstOrDefault
End Function
Но я не могу выяснить, как добавить And r.isActive = True
Кто-либо может указать на меня в правильном направлении о том, как иметь несколько операторов в этом запросе?
Вам нужно поместить свой предикат внутри ()
Примерно так
Public Function GetRegionById(ByVal id As Integer) As Region Implements IRegionService.GetRegionById
Return _RegionRepository.GetRegions() _
.Where(Function(r) (r.ID = id And r.isActive = True)).FirstOrDefault
End Function
Причина в том, что он должен возвращаться как логическое значение. Отредактируйте в ответ на комментарии Я не на 100% в этом, но я думаю, что ваш способ выполняет where дважды для каждого объекта, в основном это происходит чтобы всегда выполнять и и сравнивать оба значения с запрашиваемым объектом, где мой будет только сравнивать пока условие не станет ложным. Также я не уверен, что вы можете выполнять операции Or, используя ваш метод.
Не разбираюсь в vb, как и в c#, но выражение, используемое в операторе where, должно быть там, куда оно добавляется. Так что сейчас у вас r.ID = id. Я бы просто добавил его туда. Так что это будет: (псевдокод) r.Id = id AND r.IsActive = True
Кажется, это работает так, как я хочу.
Public Function GetRegionById(ByVal id As Integer) As Region Implements IRegionService.GetRegionById
Return _RegionRepository.GetRegions() _
.Where(Function(r) r.ID = id) _
.Where(Function(r) r.isActive = True) _
.FirstOrDefault()
End Function