用查询字符串过滤c#对象列表

时间:2018-07-27 04:51:07

标签: c# list parsing

我正在开发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,而只能将查询用作字符串。

有没有办法做到这一点?有插件吗?

1 个答案:

答案 0 :(得分:1)

实际上,您所拥有的是特定领域的语言。您需要是它的解析器。

您可以自己建立一个。在线提供了许多有用的教程和讨论。如果您想沿这条路线走,搜索domain specific languagerecursive descent parser(例如this article)等等将很有帮助。

如果您没有耐心或不愿意学习如何从头开始编写自己的语言,则可以使用很多库和框架进行构建。有几种解决方法。例如,NitraSprache之类的东西可能会有用。

由于您想在查询中允许使用VALUE<=(56x3.14)之类的计算,因此以Sprach.Calc开头可能会很有用。