Отбрасывание в пользовательский тип не выполняется

Я поддерживаю программу, созданную кем-то еще (argh). При заполнении пользовательского класса из запроса LINQ следующий оператор выдает ошибку, Specified cast is not valid. Но это не делает это для всех записей в представлении ContactPersons, только для некоторых - даже если записи выглядят одинаково для меня.

Как определить причину отказа?

var smDataContext = new SurveyManagerDataClassesDataContext(dbConnectionString);

ContactPerson contactPerson =
 (from contactPersons in smDataContext.ContactPersons
 where (contactPersons.ContactPersonID.Trim().ToUpper()
 == this.ContactPersonID.Trim().ToUpper())
 select contactPersons)
 .FirstOrDefault<contactperson>();
</contactperson>

Класс выглядит следующим образом:

public partial class ContactPerson
{
 private string _ContactPersonID;
 private string _Surname;
 private string _FirstName;
 private string _EMail;
 private string _CompanyID;
 private System.Nullable<bool> _IsDefaultForAdhocSurvey;
 private System.Nullable<bool> _IsDefaultForClosingOfTasksSurvey;
 private System.Nullable<bool> _IsDefaultForScheduledProjectSurvey;
 private System.Nullable<bool> _IsDefaultForScheduledContractSurvey;

 public ContactPerson()
 {
 }
 ...
</bool></bool></bool></bool>

Пример данных: эти данные скопированы и вставлены из представления, которое считывает данные непосредственно из нескольких таблиц:

ContactPersonID Surname FirstName EMail CompanyID IsDefaultForAdhocSurvey IsDefaultForClosingOfTasksSurvey IsDefaultForScheduledProjectSurvey IsDefaultForScheduledContractSurvey
Patrick Grey Grey Patrick [removed_email] 2410955 0 0 1 0
Patrick Black Black Patrick [removed_email] 2410955 0 0 1 0

Выполнение этого не работает:

CREATE VIEW [dbo].[ContactPersonsView]
AS
SELECT
 'Patrick Grey' as ContactPersonID,
 'Grey' as Surname,
 'Patrick' As FirstName,
 '[removed_email]' AS Email,
 '1234' as CompanyID,
 0 as IsDefaultForAdhocSurvey,
 0 as IsDefaultForClosingOfTasksSurvey,
 1 as IsDefaultForScheduledProjectSurvey,
 0 as IsDefaultForScheduledContractSurvey
1 ответ

Спасибо всем вашим комментариям. Я должен был преобразовать свои логические значения в биты.

Таким образом, если я изменил свой взгляд:

CREATE VIEW [dbo].[ContactPersonsView]
AS

 SELECT 'Patrick Grey' as ContactPersonID, 'Grey' as Surname, 'Patrick' As FirstName, '[removed_email]' AS Email, '1234' as CompanyID,
 0 as IsDefaultForAdhocSurvey, 0 as IsDefaultForClosingOfTasksSurvey, 1 as IsDefaultForScheduledProjectSurvey, 0 as IsDefaultForScheduledContractSurvey

к этому:

SELECT 'Patrick Grey' as ContactPersonID, 'Grey' as Surname, 'Patrick' As FirstName, '[removed_email]' AS Email, '1234' as CompanyID,
CONVERT(bit, 0) as IsDefaultForAdhocSurvey, CONVERT(bit, 0) as IsDefaultForClosingOfTasksSurvey, CONVERT(bit, 1) as IsDefaultForScheduledProjectSurvey, CONVERT(bit, 0) as IsDefaultForScheduledContractSurvey

то это работает.

licensed under cc by-sa 3.0 with attribution.