当创建字典时,Ling-to-SQL编译器错误

本文关键字:Ling-to-SQL 编译器 错误 创建 字典 | 更新日期: 2023-09-27 18:12:50

我试图开发一个简单的WP7数据库应用程序,使用Linq2SQL查询数据库,但今天我设法收到一个内部编译器错误:(

我的查询的简化版本如下(Results是保存我的搜索结果数据的类):

var query =
(
  from x in MyTable
  join y in MyOtherTable on x.Key equals y.Key
  where SqlMethods.Like(x.Field, "%" + searchTerm + "%")
  select new Results
  {
    MyResultField = new Dictionary<MyEnum,string>()
    {
      { MyEnum.Value, x.Field },
      { MyEnum.OtherValue, y.Field }
    },
    ...
  }
);

然而,尝试像这样创建一个新的Dictionary会导致大量编译器错误,即使智能感知并不反对。我已经搜索过了,但我不确定如何在没有尝试创建Dictionary的情况下实现类似的结果。

对于一个无望的新手有什么想法吗?!提前感谢!

对不起,我忘了包括编译器错误。除了#6,它们对我来说都是胡言乱语,但如果有帮助的话…

# Error 1   Internal Compiler Error: stage 'BEGIN'  MyProject
# Error 2   Internal Compiler Error: stage 'EMIT'   MyProject
# Error 3   Internal Compiler Error: stage 'COMPILE'    MyProject
# Error 4   Internal Compiler Error: stage 'COMPILE'    C:'...'ViewModel.cs MyProject
# Error 5   Internal Compiler Error: stage 'COMPILE' symbol '<global namespace>'    C:'...'ViewModel.cs MyProject
# Error 6   Internal Compiler Error (0xc0000005 at address 681AB648): likely culprit is 'BIND'.
# An internal error has occurred in the compiler. To work around this problem, try simplifying or changing the program near the locations listed below. Locations at the top of the list are closer to the point at which the internal error occurred. Errors such as this can be reported to Microsoft by using the /errorreport option.
#   MyProject
# Error 7   Internal Compiler Error: stage 'COMPILE' symbol 'ChineseClassmate'  C:'...'ViewModel.cs 12  11  MyProject
# Error 8   Internal Compiler Error: stage 'COMPILE' symbol 'ChineseClassmate.MyProject'    C:'...'ViewModel.cs 12  11  MyProject
# Error 9   Internal Compiler Error: stage 'COMPILE' symbol 'ChineseClassmate.MyProject.ViewModel'  C:'...'ViewModel.cs 12  11  MyProject
# Error 10  Internal Compiler Error: stage 'COMPILE' symbol 'MyProject.ViewModel.MyProjectViewModel'    C:'...'ViewModel.cs 17  15  MyProject
# Error 11  Internal Compiler Error: stage 'COMPILE' symbol 'MyProject.ViewModel.MyProjectViewModel.SearchDatabase(string)' C:'...'ViewModel.cs 57  15  MyProject
# Error 12  Internal Compiler Error: stage 'COMPILE' symbol 'MyProject.ViewModel.MyProjectViewModel.SearchDatabase(string)' C:'...'ViewModel.cs 57  15  MyProject
# Error 13  Internal Compiler Error: stage 'COMPILE' symbol 'MyProject.ViewModel.MyProjectViewModel.SearchDatabase(string)' C:'...'ViewModel.cs 57  15  MyProject
# Error 14  Internal Compiler Error: stage 'BIND' symbol 'MyProject.ViewModel.MyProjectViewModel.SearchDatabase(string)'    C:'...'ViewModel.cs 57  15  MyProject

当创建字典时,Ling-to-SQL编译器错误

我不相信你能做到。它必须能够将此调用转换为有效的sql并在其中使用新对象,因为我相信这会导致失败,因为这不能转换为在db端运行。你必须得到你的结果,然后转换成一个字典(.ToDictionary())

为每一行创建一个字典,并且每个字典只有两个相同的键,这有点奇怪。最好将Results修改为只有两个字段,如下所示:

var query =
    from x in MyTable
    join y in MyOtherTable on x.Key equals y.Key
    where SqlMethods.Like(x.Field, "%" + searchTerm + "%")
    select new Results
    {
        MyEnumValue = x.Field,
        MyEnumOtherValue = y.Field
        ...
    };

如果你迫切需要在那里有一个字典,那么可能以匿名类型返回值,然后,在使用.ToArray()之类的东西强制执行查询后,你可以用现有的字典代码创建Results对象。