2010-07-04 55 views
1

我在我的應用程序創建一個存儲庫和服務層SQL和我的回購有一個非常簡單的功能IQueryable的Linq到與多個運營商

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%在這個,但我認爲你的方式爲每個對象執行兩次,基本上它接受 始終做一個和並將兩個值與所查詢的對象進行比較,我的地方只會比較 ,直到條件爲假。另外我不確定您是否可以使用您的方法執行或操作。

+0

你的答案有用..你能告訴我你和我的區別嗎? – 2010-07-04 07:03:16

+0

@rockinthesixstring,請參閱我的編輯 – msarchet 2010-07-04 17:24:50

1

不是一個和c#一樣多的vb人,但where語句中使用的表達式應該是它的附加位置。所以你現在有r.ID = id。我只是在那裏添加它。所以它會是:(僞代碼) r.Id = id AND 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 2010-07-04 06:13:51

+0

感謝您的答案......我已經在底部給出了一個答案,就是我如何計算出來的,但是我會給你信用的,因爲你花時間去幫忙。 – 2010-07-04 06:16:22

+0

謝謝你。是的,我只是擡頭看這個鏈接: http://msdn.microsoft.com/en-us/vbasic/bb737944.aspx #5顯示你的風格,你在下面列出。 – spinon 2010-07-04 06:25:31

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的回答很有用......有誰能告訴我他和我的區別嗎? – 2010-07-04 07:02:55