LINQ查询抛出一个强制转换异常

时间:2014-01-20 21:23:03

标签: .net vb.net linq linq-to-objects

我正在VB.NET WPF解决方案中尝试LINQ查询,该解决方案通过区域桥接两个数据表和组。

我在这些行上收到“无效的投射例外”:

.MfstCt = ZoneGroup.Count(Function(c) c.Field(Of String)("ConsignmentNumber")), _
.ArticleCt = ZoneGroup.Count(Function(c) c.Field(Of String)("ArticleNumber")) _

错误说明:

  

从字符串“B4B0158234”到“布尔”类型的转换无效。

但我在查询中看不到任何转换为​​布尔值。

字段ConsignmentNumber位于mfst表中,字段ArticleNumber位于文章表中。我在下面添加了整个查询。任何人都可以帮忙建议我哪里出错吗?

Dim query = _
    From Mfst In tblMFst.AsEnumerable() _
    Join article In tblArticle.AsEnumerable() _
    On Mfst.Field(Of Integer)("PCMSConsignment_ID") Equals _
        article.Field(Of Integer)("PCMSConsignment_ID") _
    Group Mfst By Zone = Mfst.Field(Of String)("PostZone") Into ZoneGroup = Group
    Select New With _
    { _
        Key Zone, _
        .MfstCt = ZoneGroup.Count(Function(c) c.Field(Of String)("ConsignmentNumber")), _
        .ArticleCt = ZoneGroup.Count(Function(c) c.Field(Of String)("ArticleNumber")) _
    }

For Each x In query
    Console.WriteLine(x.Zone, x.MfstCt, x.MfstCt)
Next

编辑:我更改了代码以反映正确的(Of String)并更新了收到的错误消息。

2 个答案:

答案 0 :(得分:0)

Linq Count function需要一个布尔比较。你正在路过:

.Count(Function(c) c.Field(Of String)("ConsignmentNumber"))

尝试将c.Field(Of String)("ConsignmentNumber")作为布尔值返回。

答案 1 :(得分:0)

LINQ的.Count扩展方法,当它需要Func谓词时,需要函数返回一个布尔值。请参阅documentation here。该函数用作谓词来选择要计算的元素(例如Function(x) x >= 20)。

我不确定你要完成的是什么,但似乎你应该做ZoneGroup.Count()之类的事情,或者你是否想要匹配特定条件ZoneGroup.Count(Function(c) c.IsTheThingWeWant())