2009-05-06 9 views
1

dire que je crée deux ensembles de tuples comme ceci:Utilisation des types anonymes avec Linq en VB, C#

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 

Maintenant, je veux effectuer des opérations ensemble sur ces deux listes comme ceci:

Dim loTupleSetDifference = loTupleKeys.Except(loTupleExistingKeys) 

il est évident que, Linq ne peut pas effectuer un comparateur sur des ensembles si elle ne connaît pas les ensembles ont des définitions uniformes, donc il me donne cette erreur de construction:

Option Strict On disallows implicit conversions from 'System.Collections.Generic.IEnumerable(Of < anonymous type>)' to 'System.Collections.Generic.IEnumerable(Of < anonymous type>)'.

Comment est-ce que je travaille avec la déclaration de ces ensembles pour les faire maille? (Pas beaucoup de chance sur Google)

[Modifier] encore en train de la même erreur de compilation:

'*** 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) 

erreur est ici:

Dim loTupleSetDifference = loTupleDatabaseTools.Except (loTupleToolObjects)

Error 5 Option Strict On disallows implicit conversions from 'System.Collections.Generic.IEnumerable(Of < anonymous type>)' to 'System.Collections.Generic.IEnumerable(Of < anonymous type>)'.

Répondre

5

Si les types anonymes ont les mêmes noms de propriété avec les mêmes types dans les s Ame ordre, ils devraient être les mêmes types (et donc compatible).

EDIT: Basé sur les commentaires et la question mise à jour, je soupçonne que le bit qui vous manque est la possibilité de nommer les propriétés dans les types anonymes. Changer ceci:

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

dans ce:

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

Tant que les types sont justes, vous pouvez alors être d'accord avec plus de travail.

+0

Ah. J'ai fait une modification aux noms des colonnes ci-dessus. Cela doit être le problème - les noms diffèrent? Comment puis-je résoudre ce problème? – Daniel

+1

Utilisez les mêmes noms :) –

+0

J'aimerais pouvoir le faire, mais malheureusement, nos administrateurs de base de données ont choisi de ne pas conformer les noms de colonne aux mêmes conventions de dénomination que celles que nous utilisons pour le code. Un jeu de données est composé d'un jeu de résultats de procédure stockée, l'autre est une liste d'objets. Existe-t-il un moyen facile de modifier ou d'ignorer les noms ou devrais-je les copier dans des ensembles de données uniformément nommés? – Daniel

Questions connexes