2016-07-21 4 views
1

Мой код в моем слое данных DtbseDropDown = ii.DtbseDropDown вызывает ошибку, и я не уверен, как обойти его. Ошибка говорит: «Невозможно неявно преобразовать тип« bool »? к 'BOOL'. Явное преобразование существует (вы пропали без вести слепок?)»Невозможно преобразовать bool? to bool

Вот кодовые блоки для моего уровня данных и мои Entities

Уровень данных

public static List<ListProjectTypes> GetListProjectTypes() 

    { 
     using (var context = new Sys.EntityModels.HousingRehabEntities()) 
     { 
      // build and execute query against the db 
      //return context.ListProjectTypes.Where(x => x.DtbseDropDown=true).ToList(); 

      // build and execute query against the db 
      return (from ii in context.ListProjectTypes 
        where (ii.DtbseDropDown == true) 
        //&& ((ii.LastName + ii.FirstName + ii.Middle) != null)) 
        ////&& ((ii.LastName) != null)) 
        orderby ii.SortOrder 
        select new Sys.Entities.ListProjectTypes 
        { 
         ProjectType = ii.ProjectType, 
         SortOrder = ii.SortOrder, 
         DtbseDropDown = ii.DtbseDropDown 


     }).ToList(); 

     } 
    } 
} 

Субъекты

namespace CityOfMesa.HousingRehab.Sys.Entities 
{ 

public class ListProjectTypes 
    { 
     public string ProjectType { get; set; } 
     public int? SortOrder { get; set; } 
     public bool DtbseDropDown { get; set; } 
    public ListProjectTypes() 
    { 

     ProjectType = string.Empty; 
     SortOrder = 0; 
     DtbseDropDown = true; 

    } 
} 

}

+2

Возможный дубликат [Convert nullable bool? to bool] (http://stackoverflow.com/questions/6075726/convert-nullable-bool-to-bool) –

ответ

0

DtbseDropDown = ii.DtbseDropDown Изменения к DtbseDropDown = (bool)ii.DtbseDropDown

1

Да, это вызывает ваш DataModel ii.DtbseDropDown является обнуляемым BOOL и, таким образом, ошибка. Вы должны попытаться изменить его на

public class ListProjectTypes 
    { 
     public string ProjectType { get; set; } 
     public int? SortOrder { get; set; } 
     public bool? DtbseDropDown { get; set; } 
2

DtbseDropDown собственности bool (может иметь true или false значения), тогда как ii.DtbseDropDown является bool? (сокращение для Nullable<bool>, то есть может быть также null см. Nullable Types (C# Programming Guide) для более). Вы пытаетесь присвоить bool?bool, следовательно, ошибку, которую вы получаете. Что вам нужно сделать, так это проверить, действительно ли структура bool? имеет значение. Если он (.HasValue), возвращает фактическое значение (.Value), в противном случае возвращаемое значение по умолчанию (я установить значение по умолчанию false здесь):

DtbseDropDown = ii.DtbseDropDown.HasValue ? ii.DtbseDropDown.Value : false 

Вы можете также использовать ii.DtbseDropDown.GetValueOrDefault(), как это было предложено @test в комментариях. Разница между ними заключается в том, что при моем подходе вы можете контролировать, какое значение выводится, когда ii.DtbseDropDown равно null, тогда как Nullable<T>.GetValueOrDefault возвращает default(bool) (т. Е. false) по умолчанию.

+1

'ii.DtbseDropDown.GetValueOrDefault()' кажется мне более чистым. – test

+0

Действительно, просто будучи более явным, поэтому OP может видеть, как устанавливаются значения. Я также отредактирую ваше решение. – trashr0x