【问题标题】:C# Validate string if it's linq expression with NugGet LibraryC# 使用 NugGet 库验证字符串是否是 linq 表达式
【发布时间】: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 但我需要指定参数。

【问题讨论】:

标签: c# .net linq


【解决方案1】:

我使用了 Dynamic Express 库,创建了一个动态类 属性名和属性类,传递右x =>箭头函数参数 和我的查询,他们动态类,它工作。 解决了: https://www.nuget.org/packages/DynamicExpresso.Core/

【讨论】:

    【解决方案2】:

    如果我理解正确,您正在搜索使用“IN”关键字 (SQL) 的 LINQ 查询。相反,您可以在 LINQ 中使用 Contains。

    。网:

    List<int> number = new List<int>{33,2,15};
    from p in a
    where p.AccountId.Contains(number)
    select p
    

    【讨论】:

    • 我需要用正则表达式验证 linq。
    • 是别人输入的字符串,不知道是AccountId还是RoleId还是ImageId,还是TransactionId
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多