开发者

IQueryable Linq To SQL with multiple operators

开发者 https://www.devze.com 2023-01-06 03:23 出处:网络
I\'m creating a repository and service layer in my app, and my repo has a very simple function Public Function GetRegions() As IQueryable(Of Region) Implements IRegionRepository.GetRegions

I'm creating a repository and service layer in my app, and my repo has a very simple function

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

Now in my Service layer I've 开发者_开发技巧got a function like this

    Public Function GetRegionById(ByVal id As Integer) As Region Implements IRegionService.GetRegionById
        Return _RegionRepository.GetRegions().Where(Function(r) r.ID = id).FirstOrDefault
    End Function

But i can't figure out how to add And r.isActive = True

Can anyone point me in the right direction on how to have multiple operators in this query?


You need to put your predicate inside of ()

Like so

 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

The reason for this is it has to return as a boolean. Edit in response to the comments I'm not 100% on this but I think your way performs a where twice for each object, basically it'sgoing to always do an and and compare both values against the queried object, where mine will only compare until a condition is false. Also I'm not sure if you can perform Or operations using your method.


Not a vb guy as much as c# but the expression used in the where statement should be where it is appended. So you currently have r.ID = id. I would just add it there. So it would be: (pseudo code) r.Id = id AND r.IsActive = True


This seems to be working the way I want it to.

    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

精彩评论

暂无评论...
验证码 换一张
取 消