IQueryable Linq К SQL с несколькими операторами

Я создаю репозиторий и уровень служб в моем приложении, и мой 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

Кто-либо может указать на меня в правильном направлении о том, как иметь несколько операторов в этом запросе?

1
задан Chase Florell 4 July 2010 в 05:58
поделиться

3 ответа

Вам нужно поместить свой предикат внутри ()

Примерно так

 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, используя ваш метод.

1
ответ дан 2 September 2019 в 23:19
поделиться

Не разбираюсь в vb, как и в c#, но выражение, используемое в операторе where, должно быть там, куда оно добавляется. Так что сейчас у вас r.ID = id. Я бы просто добавил его туда. Так что это будет: (псевдокод) r.Id = id AND r.IsActive = True

1
ответ дан 2 September 2019 в 23:19
поделиться

Кажется, это работает так, как я хочу.

    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
0
ответ дан 2 September 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: