Hi Johannes;
Yes, it's possible, but unfortunately, in async world, things are not as straightforward as you'd like.
The query above won't work in async mode because the call "into ps" and "ps.DefaultIfEmpty()") require immediate execution. Async doesn't allow immediate execution.
var op = Coroutine.Start(AsyncLeftOuterJoinQueryCore); op.Completed += (s, args) => { var queryResult = args.Result; };
private IEnumerable<INotifyCompleted> AsyncLeftOuterJoinQueryCore() { var mgr = new EntityManager(); //bring down categories var catQuery = mgr.Categories; var catOp = catQuery.ExecuteAsync(); yield return catOp;
//bring down products var prodQuery = mgr.Products; var prodOp = prodQuery.ExecuteAsync(); yield return prodOp;
var categories = catOp.Results; var products = prodOp.Results;
var result = from c in categories join p in products on c equals p.Category into ps from p in ps.DefaultIfEmpty() select new { Category = c, ProductName = p == null ? "(No products)" : p.ProductName }; yield return Coroutine.Return(result); }
|
Hope this helps.