LINQ to SQL, la requête Dynamique avec des champs de type DATE
Je suis en train de construire une requête LINQ dynamique de la bibliothèque, donc je ne sais pas comment de nombreux paramètres que j'ai et j'obtiens une erreur lorsque vous essayez d'interroger des champs de type DATE:
Opérateur " >=' incompatible avec l'opérande types 'DateTime' et 'String'
Quand je marche à travers le débogueur dans la Dynamique.cs il montre que la valeur est de type string et le champ est de type date, donc le problème est évident, mais je n'ai aucune idée de comment l'aborder.
Des idées?
BR
Code:
using (MyEntities db = new MyEntities())
{
String SQLparam = "CreateDate >= \"" + DateTime.Now.ToShortDateString() + "\"";
List<UserList> UserList = db.UserList.Where(SQLparam).ToList();
}
Je pense que nous avons besoin de voir un peu de ce que votre code est fait - je ne pense pas que nous en savons assez pour répondre sans beaucoup d'hypothèses et de conjectures
OriginalL'auteur Acanthus | 2010-05-12
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser une requête paramétrée, par exemple
Ensuite, vous construisez le tableau que vous allez. Ce n'est pas dur.
OriginalL'auteur Craig Stuntz
J'ai eu le même problème, mais avec l'opérateur Booléen, donc j'ai généralisé la solution
Les lignes dans la fonction principale deviennent alors...
Seul inconvénient que je peux voir de cette approche est que si l'analyse échoue, nous allons soulever une exception, mais étant donné que nous devons nous débarrasser de l'un de toute façon, je ne vois pas que cela importe beaucoup trop
OriginalL'auteur Paul Hatcher
J'ai été dans le même bateau et j'ai été en mesure de résoudre ce problème en changeant une méthode dans la Bibliothèque Dynamique. C'est un hack, mais il me permet d'utiliser des dates dans les expressions avec des opérateurs d'égalité (=,>,<, etc..).
Je poste le code ici au cas où quelqu'un se soucie.
Le code que j'ai ajouté est dans le bloc si autour de la ligne 53
Le code fondamentalement vérifie si vous êtes en train de comparer un champ de date (à gauche) avec une chaîne de caractères (à droite). Et puis il convertit le droit d'expression à une date constant
Ici est l'ensemble de la ParseComparison méthode:
Vous avez raison à ce sujet. 🙂
OriginalL'auteur boca
Parce que je devais faire une comparaison, pour un DateTime? et j'ai dû faire cette modification.
Merci pour l'astuce!
OriginalL'auteur khr055