2012-03-11 18 views
4

、私は次のプロパティを持つPersonクラスを持つ文字列の部分と一致するプロパティを持つオブジェクトを取得します。タスクは、DBから、入力された文字列のいずれかの部分と等しいプロパティを持つすべてのPersonを照会することです(部分文字列はスペースで分割されます)。最も簡単な解決策は、すべての可能な組み合わせをORすることです。しかし、私の考えでは、それは正しいとは思わない。より洗練されたソリューションはありますか?
ありがとうございます。NHibernateのクエリは

+0

私は上記の解決方法を試しました。私は各プロパティと部分文字列のすべての組み合わせをORしました。 –

+0

あなたは何を試してみることができますか?フィールド上の制限フィルタリングのリストを使用して入力された組み合わせだけをORで照合したいと思うようです。 –

+0

はい、入力した文字列のプロパティと部分を 'OR'します。 foreach(var s in substrings)foreach(プロパティのvar p)criterion = Restrictions.Or(criterion、Restrictions.InsensitiveLike(p、string.Format( "%{0}%"、s)));そして、与えられた答えに基づいて私はこの解決策に固執するつもりです。 –

答えて

2

私の答えのような解決策がありますWhat does elegant mean?

の定義で始まります -

  1. データベースに計算列を作成しますが、[姓] + N」 '+ [姓] + N' '+ [SecondName]など。ORは、計算列に基づいた部分文字列だけです。これはエレガントでパフォーマンスの高いものですか?私は1つは確かではない。
  2. 詳細はFREETEXTABLE参照MSDNを作成します。ここでも、(SQLサーバーFULL-TEXT sarchに基づいて)各部分文字列に対してORが必要です。
  3. は、すべての列にLuceneインデックスを実装thisを参照してください。しかし、データベースとの間で問題を同期させることは考慮する必要があります。また、新しいフレームワークを学ぶ必要がありますが、検索は間違いなくより洗練されたIMOです。
  4. あなたが持っているもので滞在してください。

あなたが決定するのはあなた次第ですが、1-3はあなたが現在持っているものとは異なる問題を抱えています。私はエレガントではありませんが、シンプルであり、最も可能性が高いです!

+0

私はこの問題を複雑にしているようです。私はすでに使用しているものを使用します。ありがとう! –