使用CSharpCodeProvider编译使用外部数据源的LINQ查询

时间:2013-09-30 19:55:09

标签: c# .net csharpcodeprovider

我有一个查询,我需要创建一个字符串,通过WCF传输,然后在另一端编译到LINQ。我没有通过WCF传输实际的LINQ查询本身的原因是因为生成查询的方法应该不知道查询中使用的源类型(即没有依赖项)。

这就是问题所在:我将查询作为字符串传递给线路,让CSharpCodeProvider尝试并编译它,它无法找到查询中引用的数据源(代码中的 serverSource )下面)。如何创建此查询并使用CSharpCodeProvider进行编译?

var newQuery =  @"using System.Linq;" +
                                "public class SIQuery" +
                                "{" +
                                    "public static void Main(string[] args)" +
                                    "{" +
                                        "var siQuery = from e in " + serverSource + " where e % 5 == 0 select e;" +
                                    "}" +
                                "}";

我在运行时编译之前尝试定义 serverSource var serverSource = application.GetStreamable<long>("serverSource");),但这对结果没有任何影响(事实上 serverSource 无法找到。)

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以使用CompilerParameters添加嵌入式资源(该参数将采用resx文件的路径)。

您必须删除连接并调用全局变量才能从E​​mit代码访问它,但它应该可以工作。

非工作示例:

cp.EmbeddedResources.Add("resource_files.resx"); // File local to the actual code, not the emitting code.
...
string code = @"
using System.Linq;

namespace CoolThing
{
    public class SIQuery
    {
        public static void Main(string[] args)
        {
            var siQuery = from e in Resources.resource_files.serverSource
                          where e % 5 == 0 select e;
        }
    }

}";