Оценка выражения, хранящегося в виде строки
Я хочу сохранить логическое выражение в базе данных и оценить его. Нет необходимости хранить полное дерево выражений, вероятно, это делают строки.
Я представил себе такую схему: Criteria (expression_to_evaluate, value_to_return)
Например, предположим, что у меня есть выражение, которое соответствует людям в возрасте от 20 до 40 лет:
(var >= 20 AND var <= 40)
var
должен быть заменен на возраст человека, о котором идет речь, и, если есть совпадение, он должен вернуть эту строку. Если он не совпадает, следует рассмотреть следующую строку, вычисляя это выражение и так далее.
Могут быть более сложные выражения, такие как:((var >= 20 AND var <= 40) OR (var < 10))
Может быть, даже с двумя переменными:((var1 <= 10) AND (var2 >= 10 OR var1 == 20))
Это должно быть сделано либо в SQL (SQL Server 2005/2008), либо в C#. Значение соответствующей строки должно быть возвращено и обработано в C#.
Это вообще возможно?
2 ответа
EXECUTE
| EXEC
позволяет сначала построить строку T-SQL, а затем выполнить ее. Вы можете выполнить логику, чтобы сначала построить вашу строку в зависимости от ваших переменных, а затем просто EXEC
Это.
В том же духе вы можете сделать то же самое в C# и выполнить T-SQL, используя ExecuteNonQuery()
или же ExecuteReader()
,
Используйте материал System.Linq.Dynamic, который глубоко скрыт в примерах кода Visual Studio, вместе с обычным linq-to-sql. Указанные имена свойств сопоставляются с созданным классом сущностей.
myContext.MyTable.Where("Property > 20 && Property < 40").ToList();