Конечный результат
Мне нужно иметь возможность искать в любой таблице базы данных все строки, которые содержат данную строку поиска где-либо в любом из столбцов.
Текущая реализация
Я использую анонимные типы для обработки случая, когда используется анонимный select
лямбда-оператор.В настоящее время, используя рефлексию, я могу перебрать PropertyInfo[]
данного анонимного типа, получить значения по одному и сравнить их с моей строкой поиска.
var type = ob.GetType();
foreach (PropertyInfo prop in type.GetProperties())
{
var val = prop.GetValue(ob, null);
if (val.ToString().Contains(search)) return true;
}
Проблема
Эта реализация отлично работает для анонимных списков.Однако при использовании IQueryables
, который сопоставляется с SQL через EntityFramework, это не так, потому что лямбда-выражения не могут создавать запросы SQL, использующие в запросе c #.Единственный путь, который мне удалось найти, - это создание сложного дерева выражений для имитации цикла foreach
, необходимого для циклического прохождения и проверки всех элементов PropertyInfo
, связанных с анонимным объектом.
Есть ли другой способ сделать это, или мне придется копаться в некоторых статьях дерева выражений?