J'utilise LINQ vers des entités pour récupérer des dates d'achat d'éléments comme suit: La clé ici est que la colonne DB contient la date et l'heure de sorte que le temps doit être dépouillé pour le comparateur . Ce code fonctionne bien. P> Maintenant, je veux faire la même chose en utilisant Dynamic Linq vers des entités. J'utilise dynamic.cs à partir du dossier d'échantillons de code VS2010. Lorsque je code: p> ou une variante de même, je reçois un message d'erreur. Qu'est-ce que je dois coder comme valeur de chaîne pour faire ce travail? (Étant donné que je peux utiliser .startswith ou .Contains à l'intérieur de la chaîne, j'espère que la fonction de date de la date dynamique Linq reconnaîtra). P> Je sais que je peux créer la requête Dynamic Linq d'être une plage de date, conceptuellement : P> PurchaseDate >= myPurchaseDate@midnight and PurchaseDate <= myPurchaseDate+23:59:59
4 Réponses :
Je pense que vous allez vouloir aller avec la plage de date afin de pouvoir tirer parti de l'indexation sur le serveur si vous en avez besoin. Si vous baseez votre instruction SELECT sur un champ calculé, elle devra scanner la table pour chaque requête. P>
Merci de confirmer mon hunch. Bien que je n'ai pas fait d'analyse de plan de requête, cela a du sens pour moi.
Voici un lien qui répertorie les fonctions EF4 qui plantent vers SQL Fonctions P>
modèle conceptuel canonique sur les fonctions SQL Server Mapping P>
Merci. J'ai vu cette liste. Cependant, il ne s'applique pas à des requêtes dynamiques de Linq aux entités. Franchement, je ne suis pas sûr que cela s'applique même à Linq vers des entités, car j'ai toujours dû utiliser la liste canonique des fonctionnalités entityfices (qui est différente).
Si vos requêtes recherchent souvent à la date de l'aspect de la date, une autre approche à prendre en compte, si possible avec votre base de données SQL Server, seraient à stocker redondante une version tronquée de la colonne DateTime, dans un type de colonne de date. Voir http://msdn.microsoft.com/en-us/library/bb630352. ASPX ). p>
Toutes vos questions peuvent alors mieux fonctionner car il n'y a pas de conversions nécessaires, sont moins sujettes aux erreurs de développeur. Et ils sont plus faciles à interroger dans un vieil SQL clair aussi. p>
Vos requêtes EF interrogeraient ensuite sur la colonne SQL Server Date Colonne P>
Nous commençons actuellement à concevoir la nouvelle base de données et c'est quelque chose que je prévois d'augmenter avec l'architecte de la base de données.
J'ai récemment commencé à utiliser Dynamic Linq pour un projet et souhaipe également comparer les dates sans composant temporel. Le code d'exemple Dynamic Linq C # dynamique de Microsoft (dynamic.cs) prend en charge un ensemble de types fixe et entityfunctions em> n'est pas l'un d'entre eux. Mais avec une petite expérimentation, j'ai constaté que juste ajouter EntityFunctions em> au tableau des types prédéfinis permet d'utiliser TRUNCATETIME EM> et probablement autre entityfonctions em> méthodes également. P> Voici quelle est la dynamique. CS PrefefinedTypes Array ressemble à mon projet: p> avec ce fichier dynamic.cs modifié, je suis capable de créer des requêtes dynamiques de Linq, y compris des expressions telles que l'exemple d'achat dans votre question . p> p>
Excellente solution. Merci!
Solution très soignée convenue, très utile.
Quelle version du cadre d'entité utilisez-vous?