【问题标题】:LINQ: Can't cast query result as ListLINQ:无法将查询结果转换为列表
【发布时间】:2018-08-07 20:25:15
【问题描述】:

我无法使用 .ToList() 函数将下面的 LINQ 查询转换为列表。

这不是 Intellisense 中的选项。如果我在查询结束时强制使用 .ToList(),则整个查询会变成“红色波浪状”,并且错误表明 ToList 不是 HRAReport 的成员。

我不希望有这么大的讨厌的构造函数,并在类中完成所有属性设置,但我找不到将 hraRow 和 ddRow 对象传递给构造函数的方法。

我有两个数据表对象。 hraRow 包含大部分数据,但我需要从 ddRow 对象中提取两列,因此需要加入。

我不喜欢 Linq 的 lambda 版本,这就是我使用详细/查询方法的原因。

我生锈了——正如你所知——所以请温柔一点。

Dim results As List(Of HRAReport) = 
    From hraRow In dtHRA.AsEnumerable
    Join ddRow In dtDirectDeposit.AsEnumerable On hraRow.Field(Of String)("SS#") Equals ddRow.Field(Of String)("SS#")
    Select New HRAReport(hraRow.Field(Of String)("SS#"), 
                         hraRow.Field(Of String)("Name - Last,First"), 
                         hraRow.Field(Of String)("Benefit Plan Name"),
                         hraRow.Field(Of String)("HRA Annual Election"), 
                         hraRow.Field(Of String)("HRA Benefit Start Date"), 
                         hraRow.Field(Of String)("HRA Benefit Term Date"),
                         hraRow.Field(Of String)("Address 1"), 
                         hraRow.Field(Of String)("Address 2"), 
                         hraRow.Field(Of String)("City"), 
                         hraRow.Field(Of String)("State"), 
                         hraRow.Field(Of String)("Zip Code"),
                         ddRow.Field(Of String)("Account #"), 
                         ddRow.Field(Of String)("ABA #"), 
                         hraRow.Field(Of String)("Plan"), 
                         hraRow.Field(Of String)("Debit Card"), 
                         hraRow.Field(Of String)("Health Plan Code"),
                         hraRow.Field(Of String)("Email"), 
                         hraRow.Field(Of String)("Termination Date"))

【问题讨论】:

  • 您正在尝试将生成的可枚举 转换为 List。你需要在最后调用ToList()
  • .ToList() 最后不是 Intellisense 中的可用选项,如果我“强制”它会导致语法错误(红色波浪状)。

标签: vb.net linq


【解决方案1】:

如果您在末尾添加.ToList(),您正在尝试将HRAReport 的实例强制转换为列表。您应该在查询本身上调用它:

Dim results As List(Of HRAReport) = (From hraRow In dtHRA.AsEnumerable
                                     Join ddRow In dtDirectDeposit.AsEnumerable On hraRow.Field(Of String)("SS#") Equals ddRow.Field(Of String)("SS#")
                                     Select New HRAReport(/*...omitted...*/)
                                    ).ToList();

请注意多余的括号。

(我希望这是 vb.net 中的正确语法。我只是把它扔进了 Telerik 转换器)

【讨论】:

  • 我会试试的,马可。如果是这样的话,我会觉得很傻。
  • 这就是答案。 Marco 赢得了一颗金星。请不要对我这个令人难以置信的愚蠢问题投反对票。哈哈。
  • 我们都去过那里。不用担心 - 很高兴我能帮上忙。如果它解决了您的问题,请不要忘记将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 2018-11-29
  • 2012-03-20
相关资源
最近更新 更多