読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

DevExpress奮闘記-120 (XPOのDirect SQL query機能にてパラメータクエリのサポート, parameterized SQL query, LINQ to XPOでjoinサポート)

C# DevExpress


以前 (といっても2,3年前くらいですが)、XPOにSQLを直接実行する機能が
追加された際に以下のような記事を書いていました。


このとき、自分でその機能を試していて以下の点が無理でした。

  • LINQ to XPOにて、joinが利用できない
  • パラメータクエリが利用できない (SQLを指定できるだけ)


2年も経つとちょっと事情が変わっていたので再度追記です。
まず、LINQ to XPOにてjoinが利用できなかった件ですが
これは、v2012 vol.1にて利用できるようになっています。
(まだ、試していませんが。)


次に、パラメータクエリが利用できない件ですが
これ、先日たまたまExecuteQueryのドキュメントを見てたら、いつの間にかオーバーロードメソッドが
増えていましたw 以前、サポセンに聞いたときは、サポート予定無しって言われたんですけどね・・・。


探してみたら、こんなチケット発見。v2012 vol 1.2で追加されたみたいです。


現在、ExecuteQuery, ExecuteQueryWithMetaData, ExecuteNonQueryメソッドにて
パラメータクエリ用のオーバーロードが追加されています。ExecuteQueryWithMetaDataって何ぞやなのですが
これは次回取り上げようかなって思っています。


どれも使い方は同じです。
以下、サンプル。

var dataStore = new InMemoryDataStore();
var dataLayer = new SimpleDataLayer(dataStore);

using (var uow = new UnitOfWork(dataLayer))
{
  var sql     = "SELECT Id, Name FROM BookGenre WHERE Name = @Name";
  var pNames  = new string[] { "Name"     };
  var pValues = new object[] { "Computer" };

  var dbData = uow.ExecuteQuery(sql, pNames, pValues);

  var view = new XPDataView();
  view.AddProperty("Id",   typeof(int));
  view.AddProperty("Name", typeof(string));
  view.LoadData(dbData);

  grdMain.ItemsSource = view;
}


ついでに、Gistにアップしておいた。

================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。