我有一个Dictionary<string,object>
。search terms and values
在这种情况下term
是key
. 一个例子是:
var args = new Dictionary<string,object>() {{"name","joe"},
{"occupation","salesman"}};
我正在使用PredicateBuilder
来构建Where
子句并且它可以工作,但我想知道是否有更简洁的方法来做到这一点,而不是Dictionary
必须调用? 这就是我现在的做法:if(args.ContainsKey(...)
search term
Dictionary
List<Person> persons;
var predicate = PredicateBuilder.False<Person>();
if (args.ContainsKey("name"))
{
string name = args["name"].ToString();
predicate = predicate.Or(x => x.name == name);
}
if (args.ContainsKey("name"))
{
string age = args["age"].ToString();
predicate = predicate.Or(x => x.age == age);
}
persons = _context.Persons.AsExpandable().Where(predicate).ToList();
另外,如果我在 , 之外声明,string name
但在这种情况下有关系吗?例如if block
resharper
Access to modified closure
string name;
if (args.ContainsKey("name"))
{
name = args["name"].ToString();
predicate = predicate.Or(x => x.name == name); //Access to modified closure
}
但是在上面,我没有name
在任何地方修改,为什么它会告诉我这个?
我是 PredicateBuilder 的新手,所以如果有人解释什么PredicateBuilder.False<Person>()
是相对的意思PredicateBuilder.True<Person>()
以及该Compile
方法的作用是什么?