我有一本类型的字典Dim dictionaryOfAlertsForSC As New Dictionary(Of String, List(Of AlertsBO))
。字典总是有两条记录。我需要根据密钥过滤掉记录。我在字典上使用 Linq:
lstAlertsForSC = From kv As KeyValuePair(Of String, List(Of AlertsBO)) In dictionaryOfAlertsForSC Where kv.Key.Contains(ASSESSMENTS) Select kv.Value
其中 lstAlertForSC 是 AlertBo 类型的列表。它为 Linq 查询中的选择部分引发了一些类型转换的运行时错误。异常详情:
Unable to cast object of type 'WhereSelectEnumerableIterator`2[System.Collections.Generic.KeyValuePair`2[System.String,System.Collections.Generic.List`1[MA.DMR.HCSIS.Common.AlertsBO]],MA.DMR.HCSIS.Common.AlertsBO]' to type 'System.Collections.Generic.List`1[MA.DMR.HCSIS.Common.AlertsBO]'.
这是我的详细代码:
Public Sub GenerateSCAlert(ByVal userInfo As UserInfoType)
Dim ispAlertProcessDAO As ISPAlertProcessDAO
Dim lstAlertsForSC As New List(Of AlertsBO)
Dim dictionaryOfAlertsForSC As New Dictionary(Of String, List(Of AlertsBO))
Dim strAlertBOXML As String
strAlertBOXML = String.Empty
Try
LoggingHelper.Log("----------------------ISP Action based Alert Management process for SC started----------------------", TraceEventType.Information, MethodBase.GetCurrentMethod(), LoggingHelper.ISPProcesses.ISPAlertForSC)
ispAlertProcessDAO = New ISPAlertProcessDAO(userInfo)
dictionaryOfAlertsForSC = ispAlertProcessDAO.GenerateSCAlert()
If (dictionaryOfAlertsForSC.Count > 0) Then
lstAlertsForSC = From kv As KeyValuePair(Of String, List(Of AlertsBO)) In dictionaryOfAlertsForSC Where kv.Key.Contains(ASSESSMENTS) Select kv.Value.Single()
If (lstAlertsForSC.Count > 0) Then
strAlertBOXML = ispAlertProcessDAO.GenerateXMLForActionBasedAlerts(True, lstAlertsForSC)
我在应用 Linq 的地方遇到了一个例外。
我的应用程序在 VB.Net 中,但如果需要,C# 也可以。