1

次のように 2 セットのタプルを作成するとします。

    Dim losSPResults As List(Of spGetDataResults) = m_dcDataClasses.spGetData.ToList
    Dim loTupleKeys = From t In losSPResults Select t.key1, t.key2

    '' Query on an existing dataset:
    Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4

次に、これら 2 つのリストに対して集合演算を次のように実行します。

    Dim loTupleSetDifference = loTupleKeys.Except(loTupleExistingKeys)

明らかに、Linq は、セットに統一された定義があることがわからない場合、セットに対してコンパレーターを実行できないため、次のビルド エラーが発生します。

Option Strict On は、'System.Collections.Generic.IEnumerable(Of < 匿名型>)' から 'System.Collections.Generic.IEnumerable(Of < 匿名型>)' への暗黙的な変換を禁止します。

これらのセットの宣言を使用してメッシュを作成するにはどうすればよいですか? (グーグルではあまり運がありません)

[編集] それでも同じコンパイル エラーが発生します。

    '*** If we have initialized the list of tools, check to make sure it's up to date
    Dim loTupleDatabaseTools = From tt In lottTorqueTools _
                               Select StationIndex = tt.station_index, SlotNumber = tt.slot_number
    Dim loTupleToolObjects = From tt In m_lottTorqueTools _
                             Select StationIndex = tt.StationIndex, SlotNumber = tt.SlotNumber

    Dim loTupleSetDifference = loTupleDatabaseTools.Except(loTupleToolObjects)

エラーはここにあります:

Dim loTupleSetDifference = loTupleDatabaseTools.Except( loTupleToolObjects )

エラー 5 Option Strict On は、'System.Collections.Generic.IEnumerable(Of < 匿名型>)' から 'System.Collections.Generic.IEnumerable(Of < 匿名型>)' への暗黙的な変換を禁止します。

4

1 に答える 1

5

匿名型に同じプロパティ名があり、同じ型が同じ順序である場合、それらは同じ型である必要があります (したがって、互換性があります)。

編集:コメントと更新された質問に基づいて、あなたが見逃しているのは、匿名型のプロパティに名前を付ける機能だと思います。これを変える:

Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4

これに:

Dim loTupleExistingKeys = from t in m_losSPResults Select key1=t.key3, key2=t.key4

タイプが正しい限り、それ以上の作業は必要ありません。

于 2009-05-06T14:00:54.497 に答える