让我们假设以下情形:
我有两个班级:
public class Customer
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Employee
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
然后我可以:
List<Customer> customers = new List<Customer>();
List<Employee> employees = new List<Employee>();
现在我可以这样:
public static List<Employee> GetMajorEmployees(this List<Employee> employees)
{
return employees.Where(t=>t.Age >= 18).ToList();
}
但是如果不是在代码中运行查询,让用户在UI中定义它并在服务器端运行它,如下所示:
public static List<T> RunCustomQuery<T>(this List<T> items, dynamic query)
{
return items.ExecuteQuery(query); // to be implemented
}
其中query
是用户在UI中构建并保存在数据库中的实际表达式。
如何在列表上构建动态表达式,并将其作为text或json或xml保存到数据库?
在用户界面上,用户可以选择/构建查询。对于客户列表,查询可以是:
customers.Where(t=>t.FirstName == "Jhon");
此外,我希望能够从动态对象中自动提取属性,因为您可以看到这两个类具有相同的属性,但也有一些不同的属性。
有人能指出我正确的方向吗?
我需要的是像TFS那样:
答案 0 :(得分:1)
您可以使用Expression。它允许您将表达式树组合在一起并对其进行编译,然后您可以在任何使用lambda的地方使用if作为Func
或Action
。
或者如果你不编译它,你可以解释它或以任何其他方式检查。
有一些开源项目允许你序列化和反序列化表达式,但是我没有使用任何表达式,所以无法提出建议。