0

我有一个查询需要创建为字符串,通过 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;" +
                                    "}" +
                                "}";

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

提前致谢!

4

1 回答 1

0

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

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

非工作示例:

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;
        }
    }

}";
于 2013-10-01T04:01:35.443 回答