【发布时间】:2022-10-24 16:35:20
【问题描述】:
字符串 linq 查询可以动态输入,而不仅仅是开发人员。 它应该被验证。
您是否有正则表达式或 nuget 来检查字符串是否是有效的 linq 表达式?
例如对于一个有效的字符串 linq 表达式:
(a.AccountId== 33
|| a.AccountId == 2
|| a.AccountId == 15) &&
(a.RoleId == 1|| a.RoleId == 3|| a.RoleId == 4)
- 注意 - 也可以是:(可以是每次不同的 linq 查询)
(a.TransactionId == 5 && a.EmployeeName == "Tony") || etc..
无法解析的字符串示例:
(a.AccountId== 33
|| a.AccountId == 2
|| a.AccountId == 15)
(a.a.RoleId == 1|| a.RoleId == 3|| a.RoleId == 4)
在这 2 之间,没有运算符,您可以看到 a.a. 这是无效的,无法解析为 linq。
15)
(a.a.RoleId == 1||
如果有人知道一个好的 C# NuGet,比如 .net 框架 4.5 的 ExpressionEvaluator,请告诉我。
我使用过ExpressionEvaluator,Dot net framework 4.5,但它说这是一个有效的linq,但它不是:
(a.AccountId== 33
|| a.AccountId == 2
|| a.AccountId == 15)
(a.a.RoleId == 1|| a.RoleId == 3|| a.RoleId == 4)
成功是真的,但它应该是假的。
success = new CompiledExpression(query);
- NuGet 或 Regex 的结果
在文本框内,将返回 Valid:
"(a.ProfileId == 5 && a.ProfileName == 'Alex')"
无效:- l.l 双 l.l 无效
"l.l.LinkId == 5 || l.LinkName == 'Alex'"
有效且可以解析字符串
"l.LinkId == 5 || l.LinkName == 'Alex'"
参数 l。或一个。可以更改为任何 A-Z 我曾尝试使用 DynamicExpresso.Core 但我需要指定参数。
【问题讨论】:
-
这回答了你的问题了吗? Regular expression for valid boolean expression