【问题标题】:IQueryable Linq To SQL with multiple operators具有多个运算符的 IQueryable Linq To SQL
【发布时间】:2010-07-04 20:46:13
【问题描述】:

我正在我的应用程序中创建一个存储库和服务层,我的存储库有一个非常简单的功能

    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

谁能指出我在此查询中如何使用多个运算符的正确方向?

【问题讨论】:

    标签: asp.net linq-to-sql


    【解决方案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
    

    这样做的原因是它必须作为布尔值返回。 编辑以响应 cmets 我不是100%,但我认为你的方式对每个对象执行两次,基本上它正在 总是做一个和比较两个值与查询的对象,我只会比较 直到某个条件为假。另外我不确定您是否可以使用您的方法执行 Or 操作。

    【讨论】:

    • 你的答案有效..你能告诉我你和我的区别吗?
    【解决方案2】:

    不像 c# 那样是一个 vb 人,但 where 语句中使用的表达式应该是它被附加的地方。所以你目前有 r.ID = id。我会在那里添加它。所以它会是:(伪代码) r.Id = id AND r.IsActive = True

    【讨论】:

    • 这里还有一个关于 SO 的类似问题的链接。 stackoverflow.com/questions/2500972/…
    • 感谢您的回答...我已将答案放在底部,说明我到底是如何计算出来的,但我会给您信用,因为您花时间提供帮助。跨度>
    • 谢谢伙计。是的,我刚刚查看了这个链接:msdn.microsoft.com/en-us/vbasic/bb737944.aspx #5 显示了您在下面列出的风格。
    • 嗯,我将不得不标记这个以备将来考虑。看来这两个答案都是正确的,但我想知道性能。 (我想出了我的答案“翼”)
    【解决方案3】:

    这似乎按我想要的方式工作。

        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
    

    【讨论】:

    • @msarchet 的回答很有效.. 谁能告诉我他和我的区别?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多