Оценка выражения, хранящегося в виде строки - PullRequest
1 голос
/ 24 августа 2010

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

Я представил себе такую ​​схему: 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 ]

1 голос
/ 24 августа 2010

EXECUTE |EXEC позволяет сначала построить строку T-SQL, а затем выполнить ее.Вы можете выполнить логику, чтобы сначала построить вашу строку в зависимости от ваших переменных, а затем просто EXEC it.

В тех же строках вы можете сделать то же самое в C # и выполнить T-SQL, используя ExecuteNonQuery() или ExecuteReader().

0 голосов
/ 08 сентября 2010

Используйте материал System.Linq.Dynamic , который глубоко скрыт в примерах кода Visual Studio, вместе с обычным linq-to-sql. Указанные имена свойств сопоставляются с созданным классом сущностей.

myContext.MyTable.Where("Property > 20 && Property < 40").ToList();
...