J'essaie d'écrire une simple requête linq select, où dans la clause where la valeur est prise dans une zone de texte. J'ai des problèmes en cas de valeurs datetime. Maintenant, cela fonctionne:
var rawData = contextSearch.GetType().GetProperty(TableName).GetValue(contextSearch, null);
truncatedData = ((IQueryable<object>)rawData).Where(columnName + ">=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
cela fonctionne également pour <=, mais je dois trouver des enregistrements pour exactement la date donnée. Donc, quand j'essaye ceci:
truncatedData = ((IQueryable<object>)rawData).Where(columnName + "=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
Ça ne marche pas. Pourquoi? Comment puis-je faire en sorte que cela fonctionne? Pour info: nom_colonne est extrait dynamiquement de la zone de liste déroulante et j'utilise le framework d'entité.
Si vous souhaitez uniquement comparer la date et ignorer l'heure, essayez ceci:
var parsedDt = DateTime.Parse(txtCrudSearch.Text);
var nextDay = parsedDt.AddDays(1);
truncatedData = ((IQueryable<object>)rawData)
.Where(columnName + ">= @0 && " + columnName + " < @1", parsedDt, nextDay)
.ToList();
(Cette solution est basée sur la réponse @algreat)