Tengo una clase:

public class DriverShortInfoElement
{
    ......
    public DateTime? VistracksDateAdded { get; set; }
}

Y quiero llenarlo con datos de DbContext. Quiero llenar VistracksDateAdded solo alguna condición es verdadera, de lo contrario dejar como nulo:

Lo intento así:

var list = (from i in _db.Drivers
            select new DriverShortInfoElement()
            {
                .....
                VistracksDateAdded = (i.ProblemSyncToVistracksDriver != null) ? i.ProblemSyncToVistracksDriver.DateAdded : null
            }).ToList();

Pero error de compilación. ¿Cómo hacerlo así de simple?

0
Oleg Sh 16 ene. 2018 a las 15:42

3 respuestas

La mejor respuesta

Supongo que DateAdded es un DateTime. Si utiliza el operador condicional, debe convertir null a DateTime? o utilizar new Nullable<DateTime>() porque no hay una conversión implícita posible entre null y DateTime:

VistracksDateAdded = i.ProblemSyncToVistracksDriver != null
    ? i.ProblemSyncToVistracksDriver.DateAdded 
    : new Nullable<DateTime>()
3
Tim Schmelter 16 ene. 2018 a las 12:51

Hay otro operador: Operador condicional nulo

VistracksDateAdded = i.ProblemSyncToVistracksDriver?.DateAdded
3
Krzysztof Skowronek 16 ene. 2018 a las 12:49
var query =
    from driver in _db.Drivers
    select new DriverShortInfoElement
    {
        VistracksDateAdded = driver.ProblemSyncToVistracksDriver != null
            ? driver.ProblemSyncToVistracksDriver.DateAdded
            : default(DateTime?)
    };
-1
Aluan Haddad 16 ene. 2018 a las 12:57