在哪里可以找到 LinQ 解析器

发布于 2024-11-02 00:56:21 字数 233 浏览 1 评论 0 原文

我想允许我的用户编写和执行 linq 查询。 为此,我需要一个 linq 解析器。该解析器只能理解 linq 表达式,而不是完整的 C# 语言。

因此,举例来说,如果我们有 类订单 { 公共 int 订单 ID; } List list = ...

用户应该能够在 UI 中输入 “在列表中选择 p,其中 p.OrderId > 2”; 这将返回 orderId > 的订单。 2、

存在吗?

I'd like to allow my users to write and execute linq queries.
For this, I need a linq parser. This parser would understand only linq expression, not the full C# language.

So, for example, if we have
class Order
{
public int OrderId;
}
List list = ...

the user should be able to enter in the UI
"select p in list where p.OrderId > 2";
And this would return the orders where orderId > 2.

Does it exist?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

盛夏已如深秋| 2024-11-09 00:56:21

最快的方法是:

  1. 将表达式嵌入到 C# 文件中,该文件将生成一个将查询作为表达式返回的方法>;例如,对于

    从 Foos 中的 x 选择 xY
    

    你可能会发出:

    类包装器{
        IEnumerable福斯;
        公共静态表达式>表达式 { 
            get { 从 Foos 中的 x 返回 select xY; } 
        }
    }
    
  2. 对文件调用 C# 编译器。

  3. 加载生成的程序集。
  4. 访问属性
  5. 随心所欲地使用 Linq 树。

作为副产品,您可以进行类型检查和许多其他事情。唯一真正的缺点是您需要很好地了解查询执行的环境;如果你想做的事情之一是了解环境,那么这对你没有多大帮助。

The quickest way to do it is to:

  1. Embed the expression into an C# file that will generate a method that will return the query as Expression>; e.g., for

    from x in Foos select x.Y
    

    You might emit:

    class Wrapper {
        IEnumerable<blah> Foos;
        public static Expression<Func<object>> Expr { 
            get { return from x in Foos select x.Y; } 
        }
    }
    
  2. Invoke the C# compiler on the file.

  3. Load the resulting assembly.
  4. Access the property
  5. Use the Linq tree to your heart's content.

As a byproduct you get type checking and a bunch of other things. The only real downside is you need a good understanding of the environment in which the query will be executing; if one of the things you're trying to do is to understand the environment, then this doesn't help you very much.

强者自强 2024-11-09 00:56:21

您可以创建自己的 Linq 提供程序,这是MSDN 上的演练

You can create your own Linq providers, here's a walk through on MSDN

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文