1

「linq-object」を保存してから、where 句を追加しようとしました。これはビルドされますが、次のエラーで最初の行でクラッシュします。匿名部分には 2 つの型があることがわかり、そのうちの 1 つだけにキャストしようとしています。しかし、どうすれば正しく行うことができますか?

「型 '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 に答える