如何提取表达式>中使用的属性查询并测试它们的价值?
我需要创建一个函数来在执行某些规则之前评估它们的查询。代码如下:
public class DataInfo
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
}
static class Program
{
static void Main()
{
var data = new DataInfo()
{
A = 10,
B = 5,
C = -1
};
// the result should be -1
int result = Calcul<DataInfo>(data, x => x.A / x.B + x.C);
}
static int Calcul<T>(T data, Expression<Func<T, int>> query)
{
// PSEUDO CODE
// if one property used in the query have a
// value of -1 or -2 then return 0
// {
// return 0;
// }
// if one property used in the query have a
// value of 0 AND it is used on the right side of
// a Divide operation then return -1
// {
// return -1;
// }
// if the query respect the rules, apply the query and return the value
return query.Compile().Invoke(data);
}
}
在前面的代码中,计算需要将 A(10) 除以 B(5),然后加上 C(-1)。规则规定,如果查询中使用的某个属性的值为 -1 或 -2,则返回 0。所以在这个例子中,返回值应该是-1。如果查询遵循规则,则对数据应用查询并返回值。
那么,在对数据应用查询之前,如何提取查询中使用的属性并测试其中使用的值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用 ExpressionVisitor 来测试属性值。以下是如何实现逻辑的示例。
You need to use an ExpressionVisitor to test the property values. Here is an example of how you could implement the logic.
查看 Moq 的来源 - http://code.google。 com/p/moq/。
Get a look at the source of Moq - http://code.google.com/p/moq/.