2010-10-10 2 views
1

Je suis en train de générer un graphique de la forme:LINQ: Faire face à des types anonymes

User A User B  Owes  Owed  Net 
Sam  David  $20  $10  $10 
Timbo  ODP  $30  $0  $30 

En utilisant la requête suivante:

 var debt = from user in users 
        select new { 
        Username = username, 
        User = user, 
        Owes = owedBetween(username, user), 
        Owed = owedBetween(user, username), 
        Net = Owes - Owed // doesn't compile 
        }; 

Le problème est que cette dernière ligne ne fonctionne pas compiler. Existe-t-il un moyen de définir la valeur Net dans la requête, ou dois-je l'initialiser à zéro puis le modifier par la suite?

Répondre

15

Essayez d'utiliser le mot-clé let:

var debt = from user in users 
       let owes = owedBetween(username, user) 
       let owed = owedBetween(user, username) 
       select new { 
       Username = username, 
       User = user, 
       Owes = owes, 
       Owed = owed, 
       Net = owes - owed 
       }; 
+0

+1 Élégant ..... – CesarGon

+1

+1: 'let' est exactement ce qui est nécessaire. – Ani

1

Essayez:

Net = owedBetween(username, user) - owedBetween(user, username) 

Soit dit en passant, je vous suggère d'utiliser de meilleurs noms pour username et user. Lequel est lequel?

+0

ouais, je sais, je vais factoriser bientôt. –

+0

Excellent :-) ...... – CesarGon

Questions connexes