Как реализовать механизм правил? - PullRequest
190 голосов
/ 27 июня 2011

У меня есть таблица базы данных, в которой хранится следующее:

RuleID  objectProperty ComparisonOperator  TargetValue
1       age            'greater_than'             15
2       username       'equal'             'some_name'
3       tags           'hasAtLeastOne'     'some_tag some_tag2'

Теперь скажите, что у меня есть коллекция этих правил:

List<Rule> rules = db.GetRules();

Теперь у меня также есть экземпляр пользователя:

User user = db.GetUser(....);

Как бы я зациклился на этих правилах, применил логику и провел сравнения и т. Д.?

if(user.age > 15)

if(user.username == "some_name")

Поскольку свойство объекта, такое как 'age' или 'user_name', являетсяКак я мог это сделать, хранится в таблице вместе с оператором сравнения great_than и equal? ​​

C # - язык со статической типизацией, поэтому не знаете, как двигаться дальше.

Ответы [ 11 ]

0 голосов
/ 17 сентября 2017

У меня проблема с учетом регистра в ответе Мартина Коничека, так что если вы хотите, чтобы rule.MemberName не учитывал регистр, просто добавьте

var tProp = typeof(User).GetProperty(r.MemberName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).PropertyType;
...