tag route page net for displaynamefor change asp asp.net-mvc linq entity-framework entity

asp.net-mvc - route - input asp for



LINQ convierte DateTime a cadena (3)

List<Post> list = ( from c in db.TitleComments join t in db.Titles on c.TitleId equals t.Id join u in db.Users on c.UserId equals u.Id where t.Id == _titleId && c.Date > time orderby c.Date descending select new Post { Username = u.Username, PostingDate = c.Date.ToString(), Data = c.Comment } ).ToList();

El código anterior causa una excepción en la conversión de la fecha a la cadena, PostingDate = c.Date.ToString (). ¿Alguna idea de cómo evitar esto?

Error de excepción: {"LINQ to Entities no reconoce el método ''System.String ToString ()'', y este método no se puede traducir a una expresión de tienda."}


No creo que esto se pueda hacer de manera directa.

var list = select new Post { Username = u.Username, PostingDate = SqlFunctions.StringConvert(c.Date), Data = c.Comment } from (from c in db.TitleComments join t in db.Titles on c.TitleId equals t.Id join u in db.Users on c.UserId equals u.Id where t.Id == _titleId && c.Date > time orderby c.Date descending).AsEnumerable() ).ToList();

También con EF4 puedes probar algo como esto:

List<Post> list = ( from c in db.TitleComments join t in db.Titles on c.TitleId equals t.Id join u in db.Users on c.UserId equals u.Id where t.Id == _titleId && c.Date > time orderby c.Date descending select new Post { Username = u.Username, PostingDate = SqlFunctions.DateName(c.Date), Data = c.Comment } ).ToList();


Puede solucionar su problema proyectándolo en un tipo anónimo, y luego en un proyecto posterior en Post después de que los datos ya hayan sido devueltos por el DB.

(from .... select new { /* stuff */, Date = c.Date }) .AsEnumerable() .Select(p => new Post { /* stuff */, PostingDate = p.Date.ToString() }) .ToList();

Sin embargo, dado que tiene una propiedad llamada PostingDate , la fuente original es una fecha , le recomendaría que revise su objeto para mantener el valor como DateTime lugar de cadena.


linq está tratando de convertir la fecha en cadena usando sql, pero como no hay un método ToString () en sql, no puede convertirlo, este comportamiento es por diseño . Joakim

En otras palabras, devuelva la fecha y conviértala en una cadena después de que se ejecute en SQL:

( select new { Username = u.Username, PostingDate = c.Date [...] }) .ToList() // runs on SQL and returns to the application .Select(o => // is not generating a SQL, it is running on the app new Post { Username = o.Username, PostingDate = o.PostingDate.ToString(), [...] })