I’d like to implement MVC while using LINQ (specifically, LINQ-to-entities). The way I would do this is have the Controller generate (or call something which generates) the result-set using LINQ, then return that to the View to display the data. The problem is, if I do:
return (from o in myTable select o);
All the columns are read from the database, even the ones (potentially dozens) I don’t want. And – more importantly – I can’t do something like this:
return (from o in myTable select new { o.column });
because there is no way to make anonymous types type-safe! I know for sure there is no nice, clean way of doing this in 3.5 (this is not clean…), but what about 4.0? Is there anything planned, or even proposed? Without something like duck-typing-for-LINQ, or type-safe anonymous return values (it seems to me the compiler should certainly be capable of that), it appears to be nearly impossible to cleanly separate the Controller from the View.
Since no one even attempted to answer my question, I will answer it myself..
It turns out, C# 4.0 supports duck-typing – they call it dynamic typing. However, in using dynamic types to return anonymous types, we lose the benefits of strong types:
I’ve opened a feature request to have strongly-typed anonymous return types here – if you think this would be a useful addition to C# 5, follow the link and let the .Net team know!