IQueryable Linq To SQL с несколькими операторами - PullRequest
1 голос
/ 04 июля 2010

Я создаю хранилище и сервисный слой в моем приложении, и в моем репо очень простая функция

    Public Function GetRegions() As IQueryable(Of Region) Implements IRegionRepository.GetRegions
        Dim region = (From r In dc.Regions
                 Select r)
        Return region.AsQueryable
    End Function

Теперь в моем слое Service у меня есть такая функция

    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

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

Ответы [ 3 ]

1 голос
/ 04 июля 2010

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

Вроде так

 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% в этом, но я думаю, что ваш путь выполняет дважды для каждого объекта, в основном это происходит всегда делать и и сравнивать оба значения с запрашиваемым объектом, где мой будет сравнивать только пока условие не ложно. Также я не уверен, что вы можете выполнять операции Or, используя свой метод.

1 голос
/ 04 июля 2010

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

0 голосов
/ 04 июля 2010

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

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...