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



我有一个查询,我需要将其创建为字符串,通过 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 的事实)。

提前感谢!

您可能可以使用编译器参数来添加嵌入资源(该参数将采用 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;
        }
    }
}";

相关内容

  • 没有找到相关文章

最新更新