2010-10-10 101 views
1

我试图生成表单的图表:LINQ:用匿名类型处理

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

使用下面的查询:

 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 
        }; 

的问题是,最后行不编译。有没有办法在查询中设置Net值,还是必须将其初始化为零,然后再进行更改?

回答

15

尝试使用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优雅..... – CesarGon 2010-10-10 14:34:58

+1

+1:'let'正是我们所需要的。 – Ani 2010-10-10 14:35:28

1

尝试:

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

顺便说一句,我建议你用更好的名称为usernameuser。哪个是哪个?

+0

是啊,我知道了,我马上就要重构。 – 2010-10-10 14:32:54

+0

伟大:-) ...... – CesarGon 2010-10-10 14:34:09