Format Linq 2 Sql DateTime en chaîne aaaa-MM-jj

Fondamentalement, j’ai besoin de l’équivalent de T-SQL CONVERT(NVARCHAR(10), datevalue, 126)

J’ai essayé:

  1. from t in ctx.table select t.Date.ToSsortingng("yyyy-MM-dd") mais une exception non prise from t in ctx.table select t.Date.ToSsortingng("yyyy-MM-dd")
  2. from t in ctx.table select "" + t.Date.Year + "-" + t.Date.Month + "-" + t.Date.Day mais je ne pense pas que ce soit une solution utilisable, car je pourrais avoir besoin pour pouvoir changer le format.

La seule option que je vois est d’utiliser Convert.ToSsortingng(t.Date, FormatProvider) , mais j’ai besoin d’un fournisseur de format, et je ne suis pas sûr que cela fonctionne non plus.

FormatProvider ne fonctionne pas, Ssortingng.Format ne fonctionne pas ( ssortingng.Format("{0:yyyy-MM-dd}", t.Date) lève également une exception non prise en charge).

Au cas où quelqu’un d’autre aurait ce problème, j’ai résolu ce problème en créant une fonction distincte pour effectuer le formatage de la date pour moi.

Mon Linq ressemble à ceci:

 from a in context.table where ... select new Class { DateSsortingng = GetFormattedSsortingng(a.DateTimeObject) } 

Et GetFormattedSsortingng renvoie simplement DateTimeObject.ToSsortingng (“yyyy-MM-jj”); Cela fonctionne pour moi!

En supposant que t.Date soit t.Date ( DateTime? ), Cela pourrait être le problème, essayez d’utiliser:

 from t in ctx.table select (t.HasValue ? t.Date.Value.ToSsortingng("yyyy-MM-dd") : ssortingng.Empty ); 

Edit: OK, deuxième essai …

Le problème est que la traduction en SQL essaie de traduire le .ToSsortingng() en une représentation SQL et échoue. Donc si vous devez faire ce qui suit ça devrait marcher:

 (from t in ctx.table select t.Date).ToList().Select(d => d.ToSsortingng("yyyy-MM-dd")) 

ou

 (from t in ctx.table select t.Date).AsEnumerable().Select(d => d.ToSsortingng("yyyy-MM-dd")) 

AsEnumerable() transforme l’ IQueryable utilisé précédemment en un IEnumerable , arrêtant ainsi la génération du SQL (dans le cas de Linq à SQL) ou toute autre transformation effectuée par le fournisseur mettant en œuvre l’ IQueryable spécifique (par exemple, Fournisseur de Linq vers SQL).

Notez qu’avant d’appeler AsEnumerable() vous devez avoir terminé les actions que vous souhaitez convertir en SQL et exécuter directement sur la firebase database.

Existe-t-il une raison pour effectuer la conversion côté firebase database? Chaque fois que je rencontre ce type de situation, j’autorise simplement la firebase database à me fournir les données brutes, puis à effectuer le massage et la manipulation au sein de l’application. En fonction du volume de demandes adressées au serveur de firebase database et de la taille de l’ensemble de résultats, je ne souhaite pas interrompre le traitement et le temps de réponse pour effectuer des conversions de données pouvant être gérées par le client.

Essayez de créer une classe d’object que vous pouvez définir et laissez les propriétés être la valeur de votre vue. Définissez les données datetime de LINQ sous forme de chaîne et non datetime .. ex.

 //Property class [DataContract()] public class Info { [DataMember(Name = "created_date")] public ssortingng CreateDate; } //Controller var date = from p in dbContext.Person select p; CreateDate = Convert.ToDateTime(p.create_date).ToSsortingng("yyyy-MM-dd"); 

J’espère que vous allez essayer ceci .. J’ai ceci sur mes applications précédentes et c’est ce que j’ai fait.

regarde no.3

 var user = (from u in users select new { name = u.name, birthday = u.birthday.Value }) .ToList() .Select(x => new User() { name = x.name, birthday = x.birthday.ToSsortingng("yyyyMMdd") // 0埋めされるよ}); 

essaye ça

 var select = from s in db.Table where s.date == someDate select new { date = DateTime.Parse(s.date.ToSsortingng()).ToSsortingng("yyyy-MM-dd"), };