无法将带有[]的索引应用于类型' object'的表达式与AsEnumerable()

时间:2016-11-23 20:30:34

标签: c# asp.net entity-framework linq dapper

我得到以下异常:

  

无法将[]索引应用于' object'

类型的表达式

我不知道在我的情况下,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();

1 个答案:

答案 0 :(得分:1)

根据Dapper的Documentation,以及评论中提到的@Technetium,Query方法的非通用版本返回IEnumerable<dynamic>

让代码正常工作的一种方法是将.AsEnumerable替换为.OfType<IDictionary<string, object>>(根据thisthat代码,Query实际上会返回IEnumerable<DapperRow>DapperRow继承自IDictionary<string, object>),否则您可以直接在返回的dynamic上访问属性(egrCompanyId vs r [“CompanyId”])

另外,here is对SO的类似问题的回答,供参考。