Оценка выражения, хранящегося в виде строки

Я хочу сохранить логическое выражение в базе данных и оценить его. Нет необходимости хранить полное дерево выражений, вероятно, это делают строки.

Я представил себе такую ​​схему: 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();
Другие вопросы по тегам