【发布时间】:2012-01-27 16:19:06
【问题描述】:
我正在尝试实现对数据库表的文本搜索。我有一个通用存储库,我真的不想为我可能想要公开的每个模型创建派生存储库,因为数据库中有很多。
所以我遇到困难的代码如下:
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 集合提供给它。可能不是一个高性能的想法,但我还没有想到更好的方法。因此,这些可能是字符串类型的所有属性(搜索表中的所有字符串),或者它可能会拉取模型中具有自定义 Searchable 属性的某些属性。
我得到的运行时异常是:
NotSupportedException:无法创建“System.Reflection.PropertyInfo”类型的常量值。只有原始类型('例如 在此上下文中支持 Int32、String 和 Guid')。
我可以看到我正在使用反射,但不太确定究竟是什么导致了这里的异常。如果有人能指出这一点,那将不胜感激,但如果有人能提出更好的方法来做到这一点,那就太棒了。提前致谢!
【问题讨论】:
标签: c# entity-framework generics reflection