Я удалил значительное количество текста из этого вопроса, потому что я чувствую, что он должен быть более кратким.- Серг
Вот что я пытаюсь сделать.Пользователь выбирает состояние, затем ComboBox загружает города в этом состоянии, затем, когда пользователь выбирает город, ListBox загружает все проекты из этого города.
При запуске метода, который должен загружать проекты в ComboBox,Я получаю эту ошибку:
Исключение было сгенерировано целью вызова.Внутреннее исключение: "{" Указанное приведение недопустимо. "}" Допустимо. "}"
Этот метод вызывает исключение:
private void LoadProjectsToListBox(long idCity)
{
ProjectRepository projectRepo = new ProjectRepository();
//This line causes the error.
var projects = projectRepo.FindAllProjects().Where(c => c.IDCity == 1).ToList();
}
ВLinq запрос, вы увидите, что я сравниваю с жестко закодированным числом.1, это действительный идентификатор города, в котором есть проекты, поэтому он должен работать.Исключение возникает только тогда, когда я даю в запрос Linq идентификатор города с проектами.Таким образом, кажется, что ошибка возникает, когда запрос возвращает результаты.
Вот операторы SQL, которые я использовал для генерации таблиц Project и City:
create table City
(
ID integer primary key autoincrement,
Name string,
IDState integer references State(ID)
);
create table Project
(
ID integer primary key autoincrement,
Name string,
StartDate text,
IDManager integer references Manager(ID),
IDCity integer references City(ID),
IDDepartment integer references Department(ID),
ContactNumber string,
Description string
);
Мне кажется странным, чтоиспользуя точно такой же шаблон и код доступа , чтобы показать список отделов (просто еще одну таблицу в моей базе данных), все работает как ожидалось.Например, вот как я загружаю Отделы прямо сейчас только для тестирования:
private void LoadProjectsToListBox(long idCity)
{
ProjectRepository projectRepo = new ProjectRepository();
DepartmentRepository departmentRepo = new DepartmentRepository();
//Doesn't work - raises exception.
var projects = projectRepo.FindAllProjects().Where(c => c.IDCity == 1).ToList();
//Works exactly as expected.
var deps = departmentRepo.FindAllDepartments().Where(c => c.IDParentDepartment == 7).ToList();
lstProjects.Items.Clear();
foreach (var item in deps)
{
lstProjects.Items.Add(item.Name);
}
}
Редактировать:
Методы FindAllDepartments (), FindAllCities (), FindAllProjects ()по сути то же самое.
DocumentsDBEntities db = new DocumentsDBEntities();
public IQueryable<Project> FindAllProjects()
{
return db.Projects;
}
public IQueryable<City> FindAllCities()
{
return db.Cities;
}
public IQueryable<Department> FindAllDepartments()
{
return db.Departments;
}
Как уже упоминалось ранее, отдел извлечения работает;Извлечение проекта вызывает исключение.
Редактировать 3:
Я исправил это!Проблема заключалась в использовании типа данных «Текст» в таблице «Проект».Если я изменил тип данных из этого столбца с «Текст» на «Строка», он будет работать безупречно.Кто-нибудь может сказать мне, почему?