Я пытаюсь реализовать текстовый поиск для таблиц базы данных. У меня есть общий репозиторий, и я не хочу создавать производные для каждой модели, которую я мог бы представить, потому что в базе данных их довольно много.
Итак, код, с которым я сталкиваюсь, выглядит следующим образом:
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.
Исключение времени выполнения, которое я получаю:
NotSupportedException : невозможно создать постоянное значение типа 'System.Reflection.PropertyInfo'. Только примитивные типы (такие как
Int32, String и Guid ') поддерживаются в этом контексте.
Я вижу, что я использую отражение, но не совсем уверен, что именно вызывает здесь исключение. Если бы кто-то мог указать на это, это было бы очень ценно, но если бы кто-то мог предложить лучший способ сделать это, это было бы удивительно. Заранее спасибо!