Why Dictionary "does not contain a definition for 'ElementAt'" during dynamic programming
Dictionary<string, dynamic> D1 = new Dictionary<string, dynamic>();
D1.Add("w1", 10);
D1.Add("w2", false);
Dictionary<string, dynamic> D2 = new Dictionary<string, dynamic>();
D2.Add("v1", 10);
D2.Add("v2", D1);
textBox1.Text += D2.ElementAt(1).Value.ElementAt(1).Value;
we should get result on textbox1 "false"
But instead we will get run-time error: "does not contain a definition for 'ElementAt'"
if you will type:
Dictionary<string, dynamic> var1 = D2.ElementAt(1).Value;
textBox1.Text += var1.ElementAt(1).Value;
Then it will work correctly!

There are two things wrong here:
D2 is the one retrieved by D2.ElementAt(1). Don't make that assumption: dictionaries are basically unordered.Enumerable.ElementAt) on an expression of type dynamicYou can fix the second problem by just explicitly calling Enumerable.ElementAt as a static method:
textBox1.Text += Enumerable.ElementAt(D2.ElementAt(1).Value, 1).Value;
This will still leave the first part as a problem though. It's not clear what you're trying to achieve, which means it's not clear what fix I should be suggesting to that part...
See more on this question at Stackoverflow