我有一个查询,我需要将其创建为字符串,通过 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 的事实)。
提前感谢!
您可能可以使用编译器参数来添加嵌入资源(该参数将采用 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;
}
}
}";