我得到以下异常:
无法将[]索引应用于' 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();
答案 0 :(得分:1)
根据Dapper的Documentation,以及评论中提到的@Technetium,Query
方法的非通用版本返回IEnumerable<dynamic>
让代码正常工作的一种方法是将.AsEnumerable
替换为.OfType<IDictionary<string, object>>
(根据this和that代码,Query
实际上会返回IEnumerable<DapperRow>
和DapperRow
继承自IDictionary<string, object>
),否则您可以直接在返回的dynamic
上访问属性(egrCompanyId vs r [“CompanyId”])
另外,here is对SO的类似问题的回答,供参考。