Very Good Work! My concerns are these
This thread was imported from our support forum. The original discussion may contain more detailed answer. Original topic by geek3000. |
A. LINQ support: There will be no more OQL in v4.0. We're going to provide several new ways of querying the database:
Why case 1.2 is necessary? In case 1.1 any SQL database is queried only by index-based queries (fetch index range \ record \ aggregate), and all further evaluations will be performed on DO level. This (at least) implies higher RDBMS-to-DO data throughput, which is certainly not desirable. On the other hand, 1.2 isn't necessary for our own storages at all, since they evaluate RSE. If the underlying storage works locally (i.e. in the same AppDomain where DO works - that's true for in-memory and file system storage providers, if they aren't "shared"), case 1.1 brings such benefits as better caching: everything you "touch" in indexes is immediately registered in DO caches, and needs no further queries to be fetched. Above features will be implemented in sequence listed above. Right now we're intensively "fighting" with case 1.1. D. Lazy computations: As you understood, DO itself finally deals just with RSE-based queries. But RSE in initially designed to use lazy computations everywhere: when you create or deserialize an RSE provider, normally nothing happens (except validation in some cases). But when you start to enumerate it for the first time, it gets compiled (this may lead to appearance of sequence of "real" providers below it) and finally - evaluated. There are two kinds of providers:
B,C. Type inference and anonymous methods, lambda expressions: These features (except lambda expressions) don't require some "special" support in LINQ - they're purely C# 3.0 syntax sugar, i.e. you can't find "var" or anonymous method in MSIL. Lambdas are what allow LINQ to work, so they'll be definitely supported ;) Concerning usage of them in our own code: we use all features of C# 3.0 now, including LINQ \ PLINQ, when this is appropriate (e.g. to filter an IEnumerable). This also mean we'll provide support for them everywhere, where this will be appropriate as well. |