发生无效的强制转换异常

时间:2013-09-04 05:35:47

标签: vb.net linq visual-studio-2012

我收到以下错误:

发生无效的投射异常   无法转换类型为'System.Data.Linq.DataQuery`1 [WindowsApplication1.DesignSpec]'的对象   输入'WindowsApplication1.DesignSpec'

以下测试代码:

Dim prodSku As String = "11037"
Dim designSpec As DesignSpec = From row In dbLocal.DesignSpecs Where row.Name = prodSku Select row

我已经搜索过高低,并尝试了很多选项,但显然不是正确的选择。任何帮助我使用正确语法的帮助都将非常感激。

亲切的问候,并提前感谢您的帮助!

PS:我知道这听起来很俗气,但这是我的第一篇文章(希望我已经发布了它)。我已经跟随了许多线程,这些线程非常有帮助,但我无法进行任何投票,因为我没有声望点 - 真的!如果这是一个足够好的问题,也许每个人都会投票给我足够的声望点,这样我就能回报其他人的帮助。再次感谢!

2 个答案:

答案 0 :(得分:2)

Linq查询将返回一个集合(DesignSpec),而您尝试将其分配给单个实例。

您需要将过滤器应用于提取单个实例的集合 - 例如Single()SingleOrDefault()First()FirstOrDefault()等取决于根据查询的预期输出最有意义的内容。

请记住,如果查询恰好返回多个实例,则使用Single变体会导致异常,而First变体将处理此问题,因为它们只返回第一个实例发现。

答案 1 :(得分:1)

您还没有真正执行过查询。您已完成的工作描述了如何执行查询。

要实际执行查询,请使用:

  • FirstOrDefault()返回第一个匹配元素或null
  • SingleOrDefault()返回匹配元素或null(这将检查只有一个匹配元素)。如果有多个匹配元素将抛出异常
  • First()返回第一个匹配元素,如果没有找到则抛出异常
  • Single()返回匹配元素,或者在找不到或发现多个时抛出异常。