Работа с анонимными типами с Linq в VB, C # - PullRequest
1 голос
/ 06 мая 2009

Скажем, я создаю два набора кортежей так:

    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

Теперь я хочу выполнить операции над множествами в этих двух списках следующим образом:

    Dim loTupleSetDifference = loTupleKeys.Except(loTupleExistingKeys)

Очевидно, что Linq не может выполнить компаратор для наборов, если он не знает, что наборы имеют одинаковые определения, поэтому он выдаст мне эту ошибку сборки:

Option Strict On запрещает неявное преобразования из «System.Collections.Generic.IEnumerable (Из <анонимный тип>) «System.Collections.Generic.IEnumerable (Из <анонимный тип>) '.

Как мне работать с объявлением этих наборов, чтобы сделать их мешами? (Не так много удачи в Google)

[Изменить] По-прежнему получаю ту же ошибку компиляции:

    '*** 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 Опция Strict On запрещает неявные преобразования из «System.Collections.Generic.IEnumerable (Из <анонимный тип>) «System.Collections.Generic.IEnumerable (Из <анонимный тип>) '.

1 Ответ

5 голосов
/ 06 мая 2009

Если анонимные типы имеют одинаковые имена свойств с одинаковыми типами в одинаковом порядке, они должны быть одинаковыми типами (и, следовательно, совместимыми).

РЕДАКТИРОВАТЬ: Основываясь на комментариях и обновленном вопросе, я подозреваю, что вам не хватает возможности именовать свойства в анонимных типах. Изменить это:

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

До тех пор, пока типы верны, вы можете быть в порядке, не имея больше работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...