2011-10-11 11 views
5

私はRob ConeryのMassive ORMを使用しています。IEnumerableでカウント<dynamic>

返されたレコードセットをカウントするエレガントな方法はありますか?

dynamic viewModelExpando = result.ViewData.Model; 
var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

//fails as have actually got TryInvokeMember on it 
var z = queryFromMassiveDynamic.Count(); 

//works 
int i = 0; 
foreach (var item in queryFromMassiveDynamic) { 
    i++; 
} 

答えて

13

拡張メソッドのメンバ構文を使用して呼び出すのではなく、直接静的メソッドを呼び出すようにしてください。

int count = Enumerable.Count(queryFromMassiveDynamic); 
+0

+1もちろん...拡張メソッドが見つかりませんでした。私は、動的な実行時の過負荷解決の魔法に興味を持っています。私はいつもそのことを忘れているようです。 – sehe

4

質問は少しオフです。あなたは実際にIEnumerable<dynamic>のカウントをしていません。あなたはで、dynamic(これはうまくいけばIEnumerableを保持しています)の数字をにしようとしています。

これを行うための簡単な方法は、キャストを使用することです:あなたは結果をキャストすることであるseheの答えを、取ることができ

var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count(); 
4

var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count(); 

代わりに、クエリメンバー関数から取得していることを理解してください。実際にはIEnumerable型の動的変数を取得していますが、varには問題があります。

変更この

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

カウントするために、このライン

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

は、任意の鋳造を行うことなく、表示されます。

関連する問題