我有一个文本框,用户可以在其中输入关键字来搜索,包括and
和or
关键字,使关键字像SQL过滤器一样工作。如何使用Linq执行这种类型的搜索?如果可能的话,也请考虑括号(()
)
如果是自由文本条目,例如
LastName = "Smith" and FirstName = "John"
,那么您可能会发现使用Scott Guthrie的动态Linq库很有帮助,该库提供了一个Where()
方法,该方法接受字符串,并将其解析为lambda。然后你可以这样做:
string searchQuery = GetSearchQueryFromTextBox();
var searchResult = customers.Where(searchQuery);
它支持and
和or
操作符,如上面所示,以及括号和其他操作符和方法的宿主。
from s in search
where
((s.operatorKeyword == "and" && (s.property1 == "1" && s.property2 == "2")) ||
(s.operatorKeyword == "or" && (s.property1 == "1" || s.property2 == "2")))
select s