私は基本的なリポジトリモデルでFluentNH configとLinq2NHでNH2.1を使用しています。私はwinformからさまざまなフォームフィールドをダイジェストするクエリを設定しようとしています。NHibernateクエリの複雑な基準:LinqまたはICriteria?
今...
&& Field1.IsNullOrBlank() || Field1 == Criteria1 || (Criteria1IsWildCard && Regex.Match(Field1, Criteria1.Replace("*",".*")))
&& Field2.IsNullOrBlank() || Field2 == Criteria2 || (Criteria2IsWildCard && Regex.Match(Field2, Criteria2.Replace("*",".*")))
、これはのためだけ素晴らしいことだ:基準は各基準は(アスタリスクだけがサポートされています)ワイルドカードが含まれているので、ロジックが一連のであるかどうかを知らせるチェックボックスで、かなり多くのテキストボックスのシリーズですLinq2Objectsしかし、それはLinq2NHクエリの中では、多くの理由(カスタム拡張メソッド、Regexチェックなど)のために非常に遠くになることはありません。
類似のデータをダイジェストしなければならない別の検索ページを作成しましたが、クエリは文字列(SalesForce SOQL)としてクエリを必要とする別のリポジトリデータソースに対して実行されます。 NHibernateには非常に洗練されたコンパイラチェックツールが用意されているので、私は最後の選択肢としてHQLを好むでしょう。
その他の関連情報:
- 取得とLinq2Objectsを使用して結果をフィルタリングするために、テーブル全体のコンテンツをキャッシュするには、(テーブル、約15Kレコードです)やっと実現可能であるが、これに任意のオプションがないことこれがはるかに望ましいですか?
- ユーザーは必要な数のワイルドカードを持つ必要があります。したがって、StartsWith()/ EndsWith()/ Contains()の回避策を使用することは不可能です。
NHDAnateに対してこれを実行するにはどうすればいいですか?
MSSは%ワイルドカードを使用するLIKE比較をサポートしていますが、NH ICriteriaモデルはこれを直接サポートしていますが、Linq2NHはStartsWith、EndsWith、ContainsをLIKE操作に変換することをサポートしています。 – KeithS
しかし、私は 'アスタリスク' –