2010-07-04 3 views
1

Я создаю хранилище и службу слой в моем приложении, и мой репо имеет очень простой функциюIQueryable Linq To SQL с несколькими операторами

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

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

Подобно

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 с помощью вашего метода.

+0

ваш ответ работает. Можете ли вы рассказать мне о различии между вашим и моим? –

+0

@rockinthesixstring, см. Мое редактирование – msarchet

1

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

+0

Также здесь есть ссылка на аналогичный вопрос о SO. http://stackoverflow.com/questions/2500972/linq-to-sql-how-to-efficiently-do-either-an-and-or-an-or-search-for-multiple-cr – spinon

+0

Спасибо за ответ ... Я поставил ответ внизу, насколько я понял, но я дам вам кредит, потому что вы нашли время, чтобы помочь. –

+0

Спасибо человек. Да, я просто просмотрел эту ссылку: http://msdn.microsoft.com/ru-ru/vbasic/bb737944.aspx # 5 показывает ваш стиль, указанный ниже. – spinon

0

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

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

@ Ответ msarchet работает разбухает .. может ли кто-нибудь сказать мне разницу между его и моей? –

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