Estoy tratando de tomar un valor de DateTime, y si no es nulo, devuelva Short Time String. Mi consulta es el siguiente: (timein no es anulable, mientras que tiempo de espera es anulable)¿Por qué no puedo convertir DateTime con nulos como cadena en una consulta LinQ?
var times = from t in db.TimePostings
where t.MemberID == member.MemberID
select new
{
Date = t.TimeIn.ToShortDateString(),
TimeIn = t.TimeIn.ToShortTimeString(),
TimeOut = t.TimeOut.HasValue ? t.TimeOut.Value.ToShortTimeString() : "-------"
};
gvTimePostings.DataSource = times;
gvTimePostings.DataBind();
pero esto no funciona cuando intento DataBind con el error:
Could not translate expression 'Table(TimePosting).Where(t => (t.MemberID == Invoke(value(System.Func
1[System.String])))).Select(t => new <>f__AnonymousType8
4(Date = t.TimeIn.ToShortDateString(), TimeIn = t.TimeIn.ToShortTimeString(), TimeOut = IIF(t.TimeOut.HasValue, (t.TimeOut ?? Invoke(value(System.Func`1[System.DateTime]))).ToShortTimeString(), "-------"), Hours = ""))' into SQL and could not treat it as a local expression.
También consigo un error similar si trato de usar:
TimeOut = t.TimeOut.HasValue ? Convert.ToDateTime(t.TimeOut).ToShortTimeString() : "-------"
Sin embargo, si cambio de la propiedad de tiempo de espera:
TimeOut = t.TimeOut.HasValue ? t.TimeOut.ToString() : "-------",
funciona bien, pero no formatea el tiempo como lo quiero (shortTimeString).
¿Qué pasa con eso?
Supongo que el "AsEnumerable()" causa el mismo efecto como el "ToList()" en la respuesta de Justin. ¿Es el método "mejor" para usar? –
@ matthew_360: No es exactamente el mismo efecto, no - 'ToList()' tiene que compilar una lista de todos los elementos, en lugar de transmitirlos. Eso es bueno si vas a usar 'times' en varios lugares sin que haya algo de buffer * que * como resultado, pero de lo contrario no veo ninguna razón para construir el buffer - personalmente usaría' AsEnumerable', que sirve * únicamente * el propósito que desea: conversión de 'IQueryable' a 'IEnumerable '. –