データベーステーブルのテキスト検索を実装しようとしています。私はジェネリックリポジトリを持っていて、データベースにかなりの数があるので、公開したいと思うすべてのモデルに対して派生されたものを作成する必要は本当にありません。Entity Frameworkの汎用タイプのテキスト検索
var props = typeof(T).GetProperties()
.Where(p => p.PropertyType == typeof(string));
IEnumerable<T> searched = null;
if (!string.IsNullOrWhiteSpace(searchTerm))
searched = sorted.Where(c => props
.Select(p => (string)p.GetValue(c, null))
.Select(v => v.Contains(searchTerm))
.Contains(true));
私はこの小さな反射によって得られたPropertyInfoさんのコレクションを供給しています:以下のように
は、だから私はとの難しさを抱えているコードがあります。おそらく高性能のアイデアではないかもしれませんが、私はまだもっと良い方法を考える必要があります。したがって、これらはstring型のすべてのプロパティ(テーブル内のすべての文字列を検索する)か、カスタムSearchable属性を持つモデル内の特定のプロパティを取得している可能性があります。
私は取得しています実行時例外がある:
非サポート例外:タイプの定数値「System.Reflection.PropertyInfo」を作成することができません。このコンテキストでは、プリミティブ型( ' Int32、String、およびGuid'など)のみがサポートされています。
私はリフレクションを使用していますが、ここで例外が発生しているのはどういうものなのかよくわかりません。誰かがこれを指摘することができれば、それは大いに評価されるだろうが、誰かがこれを行うためのよりよい方法を示唆することができればそれはすばらしいことだろう。前もって感謝します!
ご回答ありがとうございます。あなたは問題について正しいですが、解決策は私が後にしているものではありません。 where句の反映は、データベース内の列をフィルタリングするためです。私が本当に必要とするのは、これを行うためのリフレクションの代わりです。アップはすべて同じに投票した。 :) –