保存linq变量以在where子句中添加更多

时间:2012-09-12 14:22:02

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

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

  

“无法转换类型为'System.Data.Linq.DataQuery 1[VB$AnonymousType_0的对象2 [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

1 个答案:

答案 0 :(得分: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相同。