我有一个
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)
关键是,用户(具有编程技能)可以动态且自由地选择显示的数据.
好吧,您可以使用CSharpCodeProvider在执行时编译代码。看一下Snippy的例子。在这种情况下,您需要在接受被调用List<A>的data. 我的经验是,它是有效的,但要正确执行可能会有点麻烦——特别是在添加适当的参考资料等方面。