2016-11-23 4 views
0

я получаю следующее исключение:Невозможно применить индексирование с [] к выражению типа «объекта» с AsEnumerable()

Невозможно применить индексирование с [] к выражению «объекта» типа

Не знаю, в чем альтернатива AsEnumerable() метод в моем случае.

resultList = conn.Query(query.ToString(), 
       new 
       { 
        years = new[] {year, year - 1, year - 2}, 
        yearsLimit = new[] 
        { 
        year, 
        year - 1 
        }, 
        PeriodTypeId = periodTypeId, 
        Period = period 
       }).AsEnumerable(). 
      GroupBy(r => r["CompanyId"]).Select(c => new //ERROR 
      { 
       Company = c.Key, 
       Totals = c.Select(t => new 
       { 
        Total1 = c.Select(t1 => new {Year = t1["Year"], Total1 = t1["Tot1"]}).ToArray(), 
        Total2 = c.Select(t2 => new {Year = t2["Year"], Total2 = t2["Tot2"]}).ToArray(), 
        Total3 = c.Select(t3 => new {Year = t3["Year"], Total3 = t3["Tot3"]}).ToArray(), 

       }).FirstOrDefault() 

      }).ToList(); 
+0

Каков тип возврата 'Query'? – KMoussa

+0

@KMoussa: 'IEnumerable ' –

+0

Я не уверен, какой тип возвращается 'conn.Query()'. –

ответ

1

В соответствии с Щеголеватым-х Documentation, а также @Technetium отметил в комментариях, не общая версия методы Query Retuns IEnumerable<dynamic>

Один из способов, чтобы получить ваш код работать, чтобы заменить .AsEnumerable с .OfType<IDictionary<string, object>> (согласно this и that код, оказывается, что Query фактически возвращает IEnumerable<DapperRow> и DapperRow наследует от IDictionary<string, object>), в противном случае вы можете получить доступ к свойствам непосредственно по возвращенному dynamic (например, , r.CompanyId vs r ["CompanyId"])

Кроме того, here is ответ на аналогичный вопрос о SO, для справки.

+0

... Большое спасибо –

+0

Вы очень приветствуетесь – KMoussa

Смежные вопросы