🤕

dynamic なオブジェクトの配列に対して LINQ しようとしたら、"Cannot use a lambda expression.."

2023/06/07に公開

エラー

こうしようとしたら、

var dynamicObjects = Jil.JSON.Deserialize<dynamic>(dynamicJSON);

var convertedArray = dynamicObjects.arrayDatas.Select(x => new { Id = x.id,... }).ToArray();

タヒんだ。
エラー文↓

Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type.

An expression tree may not contain a dynamic operation.

原因

dynamicObjectsがdynamicなので、コンパイラは.Selectって言われても、何の型の.Selectなのかわかりません。なので、明示的にキャストしてあげないと、評価できません。

対策

明示的にキャスト。

var dynamicObjects = Jil.JSON.Deserialize<dynamic>(dynamicJSON);

var convertedArray = ((IEnumerable<dynamic>)dynamicObjects.arrayDatas).Select(x => new { Id = x.id,... }).ToArray();

Discussion