我試圖實現數據庫表的文本搜索。我有一個通用的存儲庫,並不想爲每個我想要公開的模型創建派生的數據庫,因爲數據庫中有很多。實體框架中的泛型類型的文本搜索
所以我遇到問題的代碼如下:
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的集合。可能不是一個高性能的想法,但我還沒有想到一個更好的方法。因此,這些可能是字符串類型的所有屬性(搜索表中的所有字符串),或者它可能會拉動具有自定義可搜索屬性的模型中的某些屬性。
的運行時異常,我得到的是:
NotSupportedException異常:無法創建類型的常量值 'System.Reflection.PropertyInfo'。在此上下文中僅支持基本類型(如' Int32,String和Guid')。
我可以看到我正在使用反射,但不太清楚究竟是什麼導致這裏的異常。如果有人能指出這一點,那麼將非常感激,但如果有人可以提出更好的方法來做到這一點,那將是驚人的。提前致謝!
感謝您的回答。你對這個問題是正確的,但解決方案並不完全是我所追求的。 where子句中的反射是爲了過濾數據庫中的列。我真正需要的是替代反思來做到這一點。上投票都是一樣的。 :) – 2012-02-13 22:42:33