반응형
람다 식을 대리자 또는 식 트리 형식으로 먼저 캐스팅하지 않고 동적으로 전달 된 작업에 대한 인수로 사용할 수 없습니다.
.NET4.5 및 VS2013으로 작업 중이며 dynamic
db에서 결과 를 얻는 쿼리가 있습니다.
dynamic topAgents = this._dataContext.Sql(
"select t.create_user_id as \"User\", sum(t.netamount) as \"Amount\" from transactiondetail t where t.update_date > sysdate -7 group by t.create_user_id")
.QueryMany<dynamic>();
다음 문 Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
은 실행을 허용하지 않고 컴파일 오류로 실패 합니다.
topAgents.ToList().Select(agent => new
{
User = agent.User != null ? string.Format("{0}", agent.User).Replace("CORPNTGB\\", "") : null,
Amount = agent.Amount
});
이것은 foreach
잘 작동 하는 동안 .
var data = new List<List<object>>();
foreach (dynamic agent in topAgents)
{
data.Add(new List<object>
{
agent.User != null ? string.Format("{0}", agent.User).Replace("CORPNTGB\\", "") : null,
agent.Amount
});
}
내 눈에는 topAgents.ToList()
그것들이 동등하게 해석 될 수 있었는데, var data = new List<List<object>>();
두 번째 명령문이 컴파일러에 의해 허용 된다는 것을 명시 적으로 언급했기 때문 입니까?
컴파일러가 LINQ 선택을 허용하지 않고 각각을 허용하는 이유는 무엇입니까?
문제는 즉 topAgents
이다 dynamic
- 당신 때문에 ToList()
호출이 너무 역동적이고,이다 Select
. 다음과 같은 문제가 있습니다.
- 이와 같은 동적 호출에는 람다 식을 사용할 수 없습니다.
- 동적 호출은 어쨌든 확장 메서드를 찾지 않습니다.
다행히도 요소 유형이 동적 이기 때문에 작업이 동적 일 필요는 없습니다 . 다음을 사용할 수 있습니다.
IEnumerable<dynamic> topAgents = ...;
... 또는 그냥 var
. 둘 다 괜찮습니다.
반응형
'code' 카테고리의 다른 글
Chrome은 Safari 및 Firefox와 다르게 색상을 렌더링합니다. (0) | 2020.12.05 |
---|---|
치명적인 오류 : 메모리가 부족하지만 메모리가 충분합니다 (PHP). (0) | 2020.12.05 |
@SpringApplicationConfiguration, @WebIntegration이 Spring Boot Framework에서 더 이상 사용되지 않기 때문에 적절한 주석은 무엇입니까? (0) | 2020.12.05 |
Kotlin : 클래스에서 객체와 컴패니언 객체의 차이점 (0) | 2020.12.05 |
SwiftUI의 DSL을 활성화하는 것은 무엇입니까? (0) | 2020.12.05 |