2012-12-17 5 views
0

Je suis assez bloqué sur ce type anonyme de l'entreprise LINQ. C'est une conséquence de travailler à travers une réponse à une question précédente, mais malheureusement, je n'ai tout simplement pas le pouvoir du cerveau pour que cela fonctionne.Type anonyme et LINQ et le casting

Je renvoie une liste limitée d'événements qui sont connectés à chaque personne. La source est Entity Framework où je me bats encore pour obtenir des résultats limités par les critères d'une propriété de navigation. Le code ci-dessous est ma traduction de la réponse de Nicholas Butler. Cependant, je ne trouve aucun moyen d'adapter le type anonyme. Les plâtres ne semblent pas fonctionner - ou je n'en ai pas la moindre idée (probablement). Quelqu'un peut-il aider s'il vous plaît?

Dim test = context.persons.Where(Function (r) r.personActive).Select(Function (o) New With { _ 
       .person = o, _ 
       .events = o.events.Where(Function(e) e.eventDateTime > startdate) _ 
      }) 

      Dim Res = New ObservableCollection(Of person) 

      For Each person In test 
       Res.Add(person) 
      Next 

Donne-moi:

Erreur 2 Valeur de type '< type anonyme> (ligne 53)' ne peut pas être converti en 'PersonEntity.person'. E: \ Dropbox \ travail expérimental \ PersonEntity- Copie \ PersonEntity \ personRepository.vb 61 29 PersonEntity

J'ai obtenu plus loin avec ce code mais je ne peux toujours pas les événements attachés que je reçois encore une autre erreur avec le casting, cette fois des événements. La liste générique à ObservableList ne convertit pas apparemment. Cela semble incroyable pour répondre à ma question originale!

Dim test = context.persons.Where(Function(r) r.personActive).Select(Function(o) New With { _ 
       .person = o, _ 
       .events = o.events.Where(Function(e) e.eventDateTime > startdate) _ 
      }) 


      Dim Res = New ObservableCollection(Of person) 

      For Each t In test 
       Dim r As New person 
       r = t.person 
       r.events = t.events 
       Res.Add(r) 
      Next 

      Return Res 

Répondre

1
Function(o) New With { _ 
     .person = o, _ 
     .events = o.events.Where(Function(e) e.eventDateTime > startdate) _ 
    } 

Ce retourne un type anonyme, pas Person. Voulez-vous dire à Add sa propriété person *?

For Each o In test 
    Res.Add(o.person) 
Next 
+0

Cela faisait partie d'un autre problème, que je viens de résoudre dans une autre question. Je vous remercie. Et ton droit :) C'est exactement ce que je devais faire. –

+0

merci d'avoir souligné la syntaxe abrégée ... –