2010-07-04 108 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