1

我尝试保存“linq-object”,然后添加 where 子句。这将构建但在第一行崩溃,并出现以下错误。我可以看到匿名部分有两种类型,我尝试将其仅转换为其中一种。但是我该如何正确地做到这一点?

“无法将‘System.Data.Linq.DataQuery 1[VB$AnonymousType_02 [SubscriberContact,Subscriber]]’类型的对象转换为‘System.Linq.IQueryable`1[SubscriberContact]

Dim subscriberContacts As IQueryable(Of SubscriberContact) =
            (From sc In GetTable(Of SubscriberContact)(), s In GetTable(Of Subscriber)()
             Where sc.Subscriber.SubscriberId = s.SubscriberId)


If Not searchCriteria.CustomerNo = Nothing Then
    subscriberContacts = From sc In subscriberContacts
                         Where sc.Subscriber.CustomerNumber.Value = searchCriteria.CustomerNo()
End If
4

1 回答 1

0

如果您在未来的投影中需要这两种类型,您可以在第一个查询中使用类型推断,如下所示,只需确保不包括排序并将subscriberContacts 分配给有序结果,因为这会改变推断的类型。如果您需要订购,请使用新的变量名称。

Dim subscriberContacts =
            (From sc In GetTable(Of SubscriberContact)(), s In GetTable(Of Subscriber)()
             Where sc.Subscriber.SubscriberId = s.SubscriberId)


If Not searchCriteria.CustomerNo = Nothing Then
    subscriberContacts = From sc In subscriberContacts
                         Where sc.Subscriber.CustomerNumber.Value = searchCriteria.CustomerNo()
End If

回顾您的原始查询,您真的需要在这里加入吗?sc.Subscriber 对象与对象图中的 s 相同。

于 2012-09-12T14:37:02.897 回答