AsEnumerable ()로 'object'유형의 표현식에 []을 (를) 사용하여 색인을 적용 할 수 없습니다.

asp.net c# dapper entity-framework linq

문제

다음 예외가 발생합니다.

유형이 '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();

수락 된 답변

Dapper의 문서에 따르면 @Technetium이 주석에서 언급했듯이 Query 메서드의 제네릭이 아닌 버전은 IEnumerable<dynamic>

코드를 작동시키는 한 가지 방법은 .AsEnumerable.OfType<IDictionary<string, object>> 로 바꾸는 .AsEnumerable 입니다 ( 코드와 해당 코드에 따르면 Query 실제로 IEnumerable<DapperRow> 반환하고 DapperRowIDictionary<string, object> ), 그렇지 않으면 반환 된 dynamic (egrCompanyId vs r [ "CompanyId"])에서 직접 속성에 액세스 할 수 있습니다.

또한 여기 에 참조 용으로 비슷한 질문에 대한 대답이 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.