Rxを使用して、WindowsPhone7.5でlinq-to-sqlの非同期DataContextを記述しようとしています。私の考えは、DataContextでメソッドを定義することです。
IObservable<List<Fact>> GetFacts(Func<MyDataContext, IQueryable<Fact>> selector)
{
var selectFacts = Observable.FromAsyncPattern<MyDataContext, IQueryable<Fact>>(selector.BeginInvoke, selector.EndInvoke);
return selectFacts(db).Select((query) => query.ToList());// db variable is MyDataContext instance, and is not null during the call or later
}
このメソッドは、次のようにクライアントコードから呼び出す必要があります。
var q = GetFacts((database) => from item in database.Facts select item)
.ObserveOnDispatcher()
.Do((facts) => MessageBox.Show(facts.Count.ToString()))
.Subscribe();
私が直面している問題は非常に奇妙です。クライアントセレクター(from item in database.Facts select item
)が実際に呼び出されると、そのdatabase
コンテキストのパラメーターはnullになります。したがって、明らかにNullReferenceExceptionが発生しています。ただし、selectFacts
が呼び出されると、db
値はnullではなく、正しいインスタンスを指します。
この事実について何か説明はありますか?それを克服する方法は?
前もって感謝します。