如何在SSRS 2008 R2报告中使用带有嵌入代码的Lambda函数?

时间:2016-07-25 15:39:36

标签: vb.net linq sharepoint-2010 ssrs-2008-r2

将SSRS 2008 R2与嵌入式代码一起使用,VB.Net代码编译器似乎在我需要做任何事情时都会犯错误。

例如,我想使用LINQ Select函数对集合的元素执行一些操作,但是BIDS不断在完全有效的VB.Net代码行上抛出编译器错误。

Public Function SplitToIDs(ByVal multiValue As String) As Integer()
    Dim regex As New System.Text.RegularExpressions.Regex("((?>.*?);#\d*;#)", System.Text.RegularExpressions.RegexOptions.Compiled Or System.Text.RegularExpressions.RegexOptions.ExplicitCapture Or System.Text.RegularExpressions.RegexOptions.CultureInvariant Or System.Text.RegularExpressions.RegexOptions.IgnoreCase)
    Dim results As New System.Collections.Generic.List(Of String)()
    Dim matches As System.Text.RegularExpressions.MatchCollection = regex.Matches(multiValue)
    For Each mvMatch As System.Text.RegularExpressions.Match In matches
        results.Add(mvMatch.Value)
    Next
    'Dim pairs As String() = SplitToPairs(multiValue)
    'Dim names As System.Collections.Generic.IEnumerable(Of Integer) = System.Linq.Enumerable.Select(pairs, Function(p) Integer.Parse(Microsoft.VisualBasic.Split(p, ";#")(1)))
    Dim names As System.Collections.Generic.IEnumerable(Of Integer) = System.Linq.Enumerable.Select(results, Function(p) Integer.Parse(Microsoft.VisualBasic.Split(p, ";#")(1)))
    Return System.Linq.Enumerable.ToArray(names)
End Function

在第42行(即我呼叫System.Linq.Enumerable.Select上面的注释),Visual Studio 2008(由SQL Server 2008 R2安装的VS Shell)在我尝试预览报告时出现此错误:< / p>

An error occurred during local report processing.
The definition of the report '/XXXX' is invalid.
There is an error on line 42 of custom code: [BC30201] Expression expected.

我已经了解到[BC30201]是一个通用错误,与缺少表达式关系不大。从我的代码中可以看出,除了最基本的System命名空间类之外,我还完全限定了每个函数或变量的命名空间。在“报表属性”对话框的“引用”选项卡中,我已经引用了mscorlibSystem.Core,以确保我在代码中使用的所有函数都可以解析为系统程序集。

所以有几个问题......

  1. 可以在SSRS 2008 R2 Reports的嵌入代码中调用和使用匿名函数吗?
  2. 在这一点上,当我尝试从另一个方法调用嵌入式代码中的一个方法时,我得到了相同的[BC30201]错误。然而,我确信在本报告(或其他报告)的早期版本中我有一些更简单的方法,这实际上是有效的......我们是否应该能够在嵌入代码中从另一个调用一个自定义方法?
  3. 注意:

    我很想创建一个单独的代码模块,但我真的不想打击必要的政治斗争来说服很多人我们应该在我们的报表服务器上安装自定义程序集。但除非我可以直接从各种报表表达式调用这些程序集,否则我可能仍需要使用嵌入式代码来使程序集的方法可用于报表。

    源数据来自SharePoint 2010列表。许多列都是允许多个值的Lookup列。上面的方法去除分隔符和值以返回ID的集合。

0 个答案:

没有答案