2016-07-21 21 views
1

Mein Code in meiner Datenschicht DtbseDropDown = ii.DtbseDropDown wirft einen Fehler und ich bin mir nicht sicher, wie ich es umgehen soll. Der Fehler lautet: "Kann Typ Bool nicht implizit konvertieren?" zu 'Bool'. existiert eine explizite Konvertierung (möglicherweise fehlt eine Besetzung?)“Kann Bool nicht konvertieren? bool

Hier sind die Codeblöcke für meine Data Layer und meine Entities

Data Layer

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(); 

     } 
    } 
} 

Entities

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

Mögliches Duplikat von [NULL Bool konvertieren? bool] (http://stackoverflow.com/questions/6075726/convert-nullable-bool-to-bool) –

Antwort

0

ändern DtbseDropDown = ii.DtbseDropDown-DtbseDropDown = (bool)ii.DtbseDropDown

1

Ja, das dazu führen, dass Datenmodell ii.DtbseDropDown ein Nullable-Bool ist und damit der Fehler auf. Sie versuchen, es zu

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

DtbseDropDown Eigenschaft ändern sollte, ist bool (kann true oder false Werte haben), während ii.DtbseDropDown ist bool? (Abkürzung für Nullable<bool>, das heißt auch null sein kann. Siehe Nullable Types (C# Programming Guide) für weitere Informationen). Sie versuchen, eine bool? zu einer bool zuzuordnen, daher der Fehler, den Sie bekommen. Was Sie tun müssen, ist zu überprüfen, ob die Struktur bool? tatsächlich zuerst einen Wert hat. Ist dies der Fall (.HasValue), den aktuellen Wert zurück (.Value), sonst einen Standardwert zurückgeben (ich habe den Standardwert false hier eingestellt):

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

Sie auch ii.DtbseDropDown.GetValueOrDefault() verwenden können, wie @test vorgeschlagen in den Kommentaren. Der Unterschied zwischen den beiden ist, dass Sie mit meinem Ansatz steuern können, welcher Wert ausgegeben werden soll, wenn ii.DtbseDropDownnull ist, während standardmäßig default(bool) (d. H. false) zurückgibt.

+1

'ii.DtbseDropDown.GetValueOrDefault()' scheint mir sauberer. – test

+0

In der Tat, nur expliziter, so dass das OP sehen kann, wie die Werte gesetzt werden. Ich werde Ihre Lösung auch bearbeiten. – trashr0x

Verwandte Themen