我希望实现一个系统,用于"构建"条件,然后从数据库返回结果数据.目前,有一个存储过程可以动态生成SQL并执行它.这是我想要删除的特殊问题.
我的问题来自这样一个事实:我可以在我的标准中包含多个字段,并且对于每个字段,可能有一个或多个值,具有不同的潜在运算符.
例如,
from t in Contacts
where t.Email == "email@domain.com" || t.Email.Contains ("mydomain")
where t.Field1 == "valuewewant"
where t.Field2 != "valuewedontwant"
select t
Run Code Online (Sandbox Code Playgroud)
字段,标准和运算符存储在数据库(和List<FieldCriteria>)中,并且可能是这样的(基于上面);
Email, Equals, "email@domain.com"
Email, Contains, "mydomain" Field1,
Equals, "valuewewant" Field2,
DoesNotEqual, "valuewedontwant"
Run Code Online (Sandbox Code Playgroud)
要么
new FieldCriteria
{
FieldName = "Email",
Operator = 1,
Value = "email@mydomain.com"
}
Run Code Online (Sandbox Code Playgroud)
因此,使用我拥有的信息,我希望能够构建具有任意数量条件的查询.我之前看到过Dynamic Linq和PredicateBuilder的链接,但我无法将其视为我自己问题的解决方案.
任何建议,将不胜感激.
更新
继关于Dynamic Linq的建议之后,我提出了一个非常基本的解决方案,使用单个运算符,具有2个字段和多个条件.目前在LinqPad中编写的有点粗略,但结果正是我想要的;
enum Operator
{
Equals = 1,
}
class Condition
{
public string Field { get; set; }
public Operator Operator { …Run Code Online (Sandbox Code Playgroud)