There seems to be this commonly-held idea that value types are "more efficient" than reference types. This is entirely mythical; they are more efficient for some operations and less efficient for others.
For example, large value types are less efficient compared to reference types if the unit of work you are concerned about is the "copy the value to a new location" work. A reference type copies a pointer-sized reference irrespective of the size of the referred data and therefore copies in a single highly optimized machine instruction. A value type copies the size of the data every single time, which can be quite large and take multiple instructions.
Regardless, anonymous types are solely a convenience feature. If you don't like their performance characteristics, you don't have to use them. You can define your own struct if you'd rather.