2011-12-16 8 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'何種類ある:

は、ここに私のコードですか? –

+2

多分それは '.Sum(y => y.Tokens.Number)'またはそれ以外の何かを数えることができるでしょう –

答えて

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

彼のケースでは、 'トークン'はクラスであるので、彼は合計を得ることができません。 .. –

1

SupporterオブジェクトのTokensプロパティはintまたは何かのコレクションですか?それはintだ場合、それはあなたが行う必要があり、他の場合には、正常に動作する必要がありますので:あなたのコードの残りの部分を見ることなく

list.OrderByDescending(x => x.Supporters.Sum(y=>y.Tokens.Count())); 
関連する問題