0

文字列として作成し、WCF 経由で転送し、反対側で LINQ にコンパイルする必要があるクエリがあります。実際の LINQ クエリ自体を WCF 経由で転送しない理由は、クエリを生成するメソッドが、クエリで使用されるソースの型を認識していない (つまり、依存関係がない) ためです。

問題は次のとおりです。クエリを文字列としてネットワーク経由で渡し、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が見つからないという事実)。

前もって感謝します!

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 に答える