如何在运行时从文本构建LINQ查询?

Dan*_*vil 10 c# linq

我有一个

class A {
   public int X;
   public double Y;
   public string Z;
   // and more fields/properties ...
};
Run Code Online (Sandbox Code Playgroud)

和a List<A> data和可以构建一个linq查询,例如

var q = from a in data where a.X > 20 select new {a.Y, a.Z};
Run Code Online (Sandbox Code Playgroud)

然后dataGridView1.DataSource = q.ToList();在我的DataGridView中显示选择.

现在的问题是,是否可以从用户在运行时输入的文本构建查询?喜欢

var q = QueryFromText("from a in data where a.X > 20 select new {a.Y, a.Z}");
Run Code Online (Sandbox Code Playgroud)

关键是,用户(具有编程技能)可以动态且自由地选择显示的数据.

Sky*_*ers 5

动态Linq宝贝!

评论.

是的,使用Dynamic Linq可能无法编写示例,但如果您将常量分解出来,例如'from a in data',您将留下'where'和'select',它们可以用动态linq表示.

所以两个文本框,如果包含orderby,可能是三个,可能满足您的要求.

只是一个想法.

Jon有一个有趣的方法,但我会对编译和执行无限制代码持谨慎态度.


Jon*_*eet 4

好吧,您可以使用CSharpCodeProvider在执行时编译代码。看一下Snippy的例子。在这种情况下,您需要在接受被调用List<A>data. 我的经验是,它是有效的,但要正确执行可能会有点麻烦——特别是在添加适当的参考资料等方面。

  • +1,但会担心编译和执行任意代码。需要尽职调查,而且做了这样的事情,我说这毫无乐趣,而且会困扰你的梦想。;-) (4认同)