One of the more annoying behaviors for C# with dynamic binding is that it requires to handle labmda casting.
In other words, this will fail to compile:
foo.Where(x=>x.Name == "foo")
You have to write it as:
foo.
Where ((Func<dynamic,bool>)(x=>x.Name == "foo"))
As things gets complex, this gets really annoying.
I just finished doing a major modification to RavenDB that should drastically simplify this behavior.
That said, this is a pretty big change, we have got 1,300+ tests that says that everything is okay, but I wanted to let you know that this is a major (internal) change.
I would ask you to test the latest unstable build and to see if that works well in your scenarios.