CodeDomProvider不能识别Linq语法

ffjing 2008-04-14 04:55:43
用CodeDomProvider来编译代码,如果代码中有使用Linq的语法,编译不能通过,不知道如何解决。
部分代码如下:

CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters compilerParams = new CompilerParameters();
compilerParams.CompilerOptions = "/target:library /optimize";
compilerParams.GenerateExecutable = false;
compilerParams.GenerateInMemory = false;
compilerParams.IncludeDebugInformation = false;
compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
compilerParams.ReferencedAssemblies.Add("System.dll");
compilerParams.ReferencedAssemblies.Add("System.Data.Linq.dll");
compilerParams.ReferencedAssemblies.Add("System.Xml.Linq.dll");
compilerParams.ReferencedAssemblies.Add("System.Core.dll");
compilerParams.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
......
//我在这里加入了全部可能使用到的dll
CompilerResults results = codeProvider.CompileAssemblyFromSource(compilerParams, SourceCode);

如果SourceCode中使用Linq的语法,编译失败。
例如:
using System.Dictionary;
public static class Test
{
public static object Execute(object[] objs)
{
public List<Formula> mFormulas = null;
mFormulas = (from f in Global.mDictionaryDataContext.Formulas
select f).ToList(); //这条语句不能编译通过,报约7个语法错误
......
}
}
...全文
148 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
拉达曼迪斯II 2008-07-24
  • 打赏
  • 举报
回复
其实我用CODEDOM下来。
感觉很累。
SlaughtChen 2008-07-24
  • 打赏
  • 举报
回复
学习了... ...
lextm 2008-04-18
  • 打赏
  • 举报
回复
CodeDom归根到底只使用了编译器很少一部分功能,因此支持的语法有限。

真正的C# 3.0编译器接受了C#源代码后,首先会有前端将LINQ语法展开为Extension Method的组合,而对于在后端产生MSIL代码的过程来说,基本上还是2.0一样的MSIL输出。
ffjing 2008-04-18
  • 打赏
  • 举报
回复
谢谢楼上的答复,问题确实如此。
我用MS的DynamicQueryable基本能实现我的需求,就是复杂了点。

另外,我很想知道为什么VS2008开发环境下可以编译Linq语法编写的代码。
lextm 2008-04-14
  • 打赏
  • 举报
回复
CodeDOM本来就不支持很多语言特性。如果不使用LINQ语法,而是采用比较难看一点的函数调用形式,应该有可能编译过。

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧