2011-12-16 64 views
0

我用一段代码如下:奇怪的例外,当我使用LINQ

list.OrderByDescending(x => x.Supporters.Sum(y=>y.Tokens)); 

(简短的说明:任何x具有支持者的名单,任何力撑可以给一些令牌,我需要订购由x的总和令牌)。

,我得到了一个exeption:

Unable to cast object of type 'System.Linq.Expressions.MethodCallExpressionN' to type 'System.Linq.Expressions.MemberExpression'."} System.SystemException {System.InvalidCastException} 

什么是错的,如何让它正确吗? 感谢您的帮助。

+1

是什么类型`Tokens`? – 2011-12-16 08:40:15

+2

也许它应该是`.Sum(y => y.Tokens.Number)`或其他任何可以计数的东西 – 2011-12-16 08:40:22

回答

1

没有看到你的代码的其余部分是有点棘手。我只为自己尝试过(见下面的代码),我没有遇到任何问题。

这里是我的代码:

static void Main(string[] args) 
{ 
    List<Team> list = new List<Team> 
     { 
      new Team { Name = "1", Supporters = new List<Supporter> 
       { 
        new Supporter { Name = "Bob", Tokens = 4 }, 
        new Supporter { Name = "Sarah", Tokens = 3 }, 
        new Supporter { Name = "Jane", Tokens = 6 }, 
       } }, 
      new Team { Name = "2", Supporters = new List<Supporter> 
       { 
        new Supporter { Name = "Brian", Tokens = 4 }, 
        new Supporter { Name = "Ellie", Tokens = 19 }, 
        new Supporter { Name = "Steve", Tokens = 12 }, 
       } }, 
      new Team { Name = "3", Supporters = new List<Supporter> 
       { 
        new Supporter { Name = "John", Tokens = 7 }, 
        new Supporter { Name = "Vern", Tokens = 11 }, 
        new Supporter { Name = "Peter", Tokens = 18 }, 
       } }, 
     }; 

     var results = list.OrderByDescending(x => x.Supporters.Sum(y => y.Tokens)); 
    } 
} 

class Team 
{ 
    public string Name { get; set; } 

    public List<Supporter> Supporters { get; set; } 
} 

class Supporter 
{ 
    public string Name { get; set; } 

    public int Tokens { get; set; } 
} 
1

Supporter对象上的Tokens属性是int或某个东西的集合?因为如果它是一个int它应该做工精细,在其他情况下,你应该做的:

list.OrderByDescending(x => x.Supporters.Sum(y=>y.Tokens.Count()));