I don't know if this is specifically your problem, but it certainly was mine, and it took me a while to figure out. For reasons that I'm not entirely clear on, the Azure team has provided two different and incompatible ways to execute queries - and although they're incompatible at runtime, the Azure team has helpfully (not!) made sure that they have compatible signatures at compile time.
See the difference between the "Fluent" and "IQueryable" modes described here:
In other words, both of these will compile and run and do more or less the same thing:
var fluentQuery = new TableQuery<T>().Where(filter);
var fluentResult = Table.ExecuteQuery(fluentQuery);
var iQueryableQuery= from ent in Table.CreateQuery<T>()
where ent.PartitionKey == "some value"
select ent;
var iQueryableResult = iQueryableQuery.AsTableQuery().Execute();
But while this one will compile just fine, it will blow up at runtime with the System.NotSupportedException
that you (and I) ran into.
var fluentQuery2 = Table.CreateQuery<T>().Where(filter);
var fluentResult2 = fluentQuery2.Execute();
I'm sure that the folks at MS had some good reason for this particular violation of the Principle of Least Astonishment - they're not idiots - but it certainly remains the case that this behavior is, shall we say, unusual.