Рассчитывать на IEnumerable <dynamic> - PullRequest
5 голосов
/ 12 октября 2011

Я использую Mass ORM Роба Конери.

Есть ли элегантный способ подсчета возвращенного набора записей?

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

Ответы [ 3 ]

13 голосов
/ 12 октября 2011

Вместо того, чтобы вызывать его с использованием синтаксиса члена метода расширения, попробуйте вызвать статический метод напрямую.

int count = Enumerable.Count(queryFromMassiveDynamic);
4 голосов
/ 19 апреля 2012

Вы можете принять ответ sehe, который должен привести к результату.

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

Вместо этого осознайте, что вы получаете от функции-члена Query. Вы на самом деле получаете IEnumerable типа dynamic, и у var с этим проблемы.

Изменить эту строку

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;

К этому

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;

Счет появится без необходимости каста.

4 голосов
/ 12 октября 2011

Вопрос немного не в порядке. Вы на самом деле не делаете подсчет IEnumerable<dynamic>. Вы пытаетесь считать на dynamic (который, надо надеяться, содержит IEnumerable).

Простой способ сделать это - использовать приведение:

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