假设我在SQL数据库中有一个包含这种结构规则的表:
Rule Conditions Action
------------`------------------------------------------ ---------------------
1 {"country": "USA", "state": "NY"} DoActionOne
2 {"country": "France", "department": "55"} DoActionTwo
这些规则适用于我的用户。因此,州,国家,部门是我可以在我的用户或用户地址定义中找到的属性。但这些规则可能是另一回事。它可以是我的用户创建日期或我现在不期望的事情。
如何加载此条件字符串并使用我的用户评估每个规则,每个条件?我知道如何从我的数据库中检索数据。我使用Entity Framework但我不知道如何在查询或JSON对象中转换字符串。
'NOT TESTED
For Each rule As Rule In dbContext.rules
'Load condition one
Dim condition = rule.Conditions.???
If (MyUser[condition.Name] = condition.Value)
' DoAction
End If
Next
答案 0 :(得分:0)
您可以使用一点Reflection
来实现此目的。
我们假设这是你的UserAddress
类
public class UserAddress
{
public string Country { get; set; }
public string State { get; set; }
public int Department { get; set; }
//other properties
}
然后,假设您已经正确阅读JSON
并将规则列表作为字符串对(例如“country”&“France”,“department”&“55”等),您可以将规则检查代码编写为
var userAdd = new UserAddress { Country = "France", Department = 55, State = "SomeState" };
bool allRulesChecked = true;
foreach (var rule in rules)
{
var property = typeof(UserAddress).GetProperty(rule.Key, System.Reflection.BindingFlags.IgnoreCase |
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance);
if (property != null && property.GetValue(userAdd).ToString() != rule.Value.ToString())
{
allRulesChecked = false;
break;
}
}
请注意,对于复杂类型,它无法正常工作。