Ich versuche, eine einfache Linq-Auswahlabfrage zu schreiben, bei der in der where-Klausel der Wert aus einem Textfeld übernommen wird. Ich habe ein Problem bei Datums- / Uhrzeitwerten. Nun funktioniert das:
var rawData = contextSearch.GetType().GetProperty(TableName).GetValue(contextSearch, null);
truncatedData = ((IQueryable<object>)rawData).Where(columnName + ">=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
Dies funktioniert auch für <=, aber ich muss Datensätze für genau das angegebene Datum finden. Also, wenn ich das versuche:
truncatedData = ((IQueryable<object>)rawData).Where(columnName + "=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
Es funktioniert nicht. Warum? Wie kann ich das zum Laufen bringen? Zu Ihrer Information: Der Spaltenname wird dynamisch aus der Combobox übernommen und ich verwende das Entity Framework.
Wenn Sie nur das Datum vergleichen und die Uhrzeit ignorieren möchten, versuchen Sie Folgendes:
var parsedDt = DateTime.Parse(txtCrudSearch.Text);
var nextDay = parsedDt.AddDays(1);
truncatedData = ((IQueryable<object>)rawData)
.Where(columnName + ">= @0 && " + columnName + " < @1", parsedDt, nextDay)
.ToList();
(Diese Lösung basiert auf @algreat Antwort )