Я использую CodeDomProvider для компиляции кода Linq и динамического выполнения запросов. Однако я сталкиваюсь с очень странной проблемой.
Если мой запрос Linq в сгенерированном коде выглядит так, все работает:
namespace Dynamic
{
using System.Linq;
using System.Collections.Generic;
public static class Query
{
public static int GetRecords()
{
MyData.Data.DataMart container = new MyData.Data.DataMart();
return (container.EventDetails).Count();
}
}
}
Это компилируется и работает просто отлично. Однако, если я изменю запрос linq на следующий, он не скомпилируется:
return (from e in container.EventDetails select e).Count();
Это работает нормально, если я помещаю это как статический код, но если я пытаюсь скомпилировать его с помощью CodeDomProvider, он терпит неудачу (и я не нашел какого-либо хорошего способа получить сообщения об ошибках, почему он терпит неудачу). Я хотел бы использовать стиль синтаксиса from-in-select, поскольку это облегчит мне создание запросов linq, но я не могу понять, почему они не компилируются.
Вы можете увидеть часть кода, который я использую для компиляции этого фрагмента, по ссылке в верхней части этого поста.
Спасибо!
Редактировать: Копировать код из поста, на который я ссылался:
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cp = new CompilerParameters();
cp.GenerateInMemory = true;
cp.ReferencedAssemblies.Add("mscorlib.dll");
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
cp.ReferencedAssemblies.Add("System.Data.Linq.dll");
cp.ReferencedAssemblies.Add("System.Data.Entity.dll");
cp.ReferencedAssemblies.Add("MyApp.Data.dll");
var results = provider.CompileAssemblyFromSource(cp, source);
var assm = results.CompiledAssembly;
Edit2: Что касается исключения, я получаю исключение от второй до последней строки кода (var results = ...). Исключение составляет BadImageFormatException:
Не удалось загрузить файл или сборку '0 байт, загруженных из системы,
Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089 'или
одна из его зависимостей. Была предпринята попытка загрузить программу с
неверный формат