Ошибка компилятора Ling-to-SQL при создании словаря - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь разработать простое приложение базы данных 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, подобный этому, приводит к множеству ошибок компиляции, хотя IntelliSense не возражаетЯ искал вокруг, но я не уверен, как достичь подобного результата, не пытаясь создать 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

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Немного странно создавать словарь для каждой строки, и каждый словарь имеет только одни и те же два ключа. Вам лучше изменить 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 объекты с существующим кодом словаря.

Надеюсь, это поможет.

1 голос
/ 28 октября 2011

Я не верю, что вы можете сделать это. Он должен быть в состоянии перевести этот вызов в действительный sql, и использование там новых объектов как таковых, как я полагаю, приведет к сбою, поскольку он не конвертируемый, чтобы запускать все на стороне базы данных. Вы должны получить свои результаты и преобразовать их в словарь (.ToDictionary ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...