ADO.NET Data Services できるやん・・。
DataSvcUtil.exe を使わなアカンと思ってたんやけど、自動生成できますやん。いつから出来てたんやこれ??
サービス作るところは省略します。こことか参照してください。
サービス参照ですが、 WCF とかと同じように普通にサービス参照を追加するのみです。
そうするとこんな感じでクライアントコードが自動生成されます。
で、使います。
NorthwindEntities context = new NorthwindEntities( new Uri("http://localhost:56378/Northwind.svc",UriKind.Absolute)); DataServiceQuery<Customers> query = context.CreateQuery<Customers>("Customers"); query = query.AddQueryOption("$filter","Country eq 'Mexico'"); query.BeginExecute(result => { IEnumerable<Customers> customers = query.EndExecute(result); dataGrid.ItemsSource = customers.ToArray(); },null);
注意点としては以下の2点。
- クエリは AddQueryOption で追加してあげる必要がある。
- DataGrid の ItemSource への設定は、ToArray なり ToList なり何なりで詰め替える必要がある。
CreateQuery の引数で filter とかを指定すると怒られました。
DataServiceQuery<Customers> query = context.CreateQuery<Customers>("Customers?$filter=Country eq 'Mexico'"); //query = query.AddQueryOption("$filter", "Country eq 'Mexico'");
DataGrid の ItemSource に結果をそのまま設定しても怒られました。ListBox では大丈夫だったんで DataGrid の実装がなにか違うのかもしれません。
dataGrid.ItemsSource = query.EndExecute(result); //IEnumerable<Customers> customers = query.EndExecute(result); //dataGrid.ItemsSource = customers.ToArray();
掲載したコードしか試してないので、まだ落とし穴はあるかも知れませんがいい感じです。
さて、次は更新を試してみないと。