我正在开发C#MVC项目,并且具有以下对象列表:
var list = [{
ID: 100,
PRODUCTNO: 500,
PARAMETER: TEST0,
VALUE: 120
},
{
ID:101,
PRODUCTNO:501,
PARAMETER:TEST1,
VALUE:121
},
{
ID:102,
PRODUCTNO:502,
PARAMETER:TEST2,
VALUE:122
},
{
ID:103,
PRODUCTNO:503,
PARAMETER:TEST3,
VALUE:123
}]
我需要使用以下查询字符串从此列表中过滤数据:
"((PRODUCTNO==502 && VALUE>121)||(PARAMETER=='TEST3' && VALUE<=(56x3.14)))"
我不能使用LINQ,而只能将查询用作字符串。
有没有办法做到这一点?有插件吗?
答案 0 :(得分:1)
实际上,您所拥有的是特定领域的语言。您需要是它的解析器。
您可以自己建立一个。在线提供了许多有用的教程和讨论。如果您想沿这条路线走,搜索domain specific language
和recursive descent parser
(例如this article)等等将很有帮助。
如果您没有耐心或不愿意学习如何从头开始编写自己的语言,则可以使用很多库和框架进行构建。有几种解决方法。例如,Nitra或Sprache之类的东西可能会有用。
由于您想在查询中允许使用VALUE<=(56x3.14)
之类的计算,因此以Sprach.Calc开头可能会很有用。