Trabalhando com tipos anônimos com Linq em VB, C #
Pergunta
Say I criar dois conjuntos de tuplas assim:
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
Agora eu quero realizar operações de conjunto sobre estas duas listas assim:
Dim loTupleSetDifference = loTupleKeys.Except(loTupleExistingKeys)
Obviamente, Linq não pode executar um comparador em conjuntos se não conhecer os conjuntos têm definições uniformes, por isso vai me dar a este erro de compilação:
Option Strict On não permite implícita conversões de 'System.Collections.Generic.IEnumerable (Of
)' para 'System.Collections.Generic.IEnumerable (Of )'.
Como eu trabalho com a declaração desses conjuntos para torná-los malha? (Não é muita sorte no google)
[Edit] Ainda recebendo o mesmo erro de compilação:
'*** 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)
O erro é aqui:
= Dim loTupleSetDifference loTupleDatabaseTools.Except (
Erro 5 Option Strict On não permite conversões implícitas de 'System.Collections.Generic.IEnumerable (Of
)' para 'System.Collections.Generic.IEnumerable (Of )'.
Solução
Se os tipos anônimos têm os mesmos nomes de propriedades com os mesmos tipos na mesma ordem, eles devem ser os mesmos tipos (e, portanto, compatível).
EDIT: Com base nos comentários e a questão atualizado, eu suspeito que o pouco que está faltando é a capacidade de nomear as propriedades em tipos anônimos. Alterar esta:
Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4
a este:
Dim loTupleExistingKeys = from t in m_losSPResults Select key1=t.key3, key2=t.key4
Enquanto os tipos estão certos, você pode, então, ser aprovado sem mais trabalho.