2010-01-18 3 views
1

Je suis en train de convertir ce code à partir d'une procédure stockée dans un "LINQ to Entities" requête:Entity Framework - DateTime dans la clause where

select * from myTable 
where venue_date + start_time <= @EndDate 
and dateadd(minute, duration * 24 * 60, venue_date + start_time) >= @StartDate 

Comme vous pouvez le voir, il y a une certaine manipulation de dates. Ce genre de chose ne fonctionne pas parce que des fonctions telles que .AddHours() ne sont pas pris en charge:

where b.Venue_Date.Value.AddHours(b.Start_Time.Value.Hour) <= request.EndDate 

Quelque chose comme cela ne fonctionnera pas non plus. L'erreur dit quelque chose de ne pas soutenir les constructeurs avec des paramètres:

where new DateTime(b.Venue_Date.Value.Year, b.Venue_Date.Value.Month, 
    b.Venue_Date.Value.Day, b.Start_Time.Value.Hour, b.Start_Time.Value.Minute, 
    b.Start_Time.Value.Second) <= request.EndDate 

Il semble que le Entity Framework est très restrictive en traitant avec des dates. Je suppose que je vais devoir utiliser une procédure. Le prochain problème consiste à déterminer comment créer une procédure pouvant remplir plusieurs collections d'objets connexes.

+0

Alors ... quelle est la vraie question ici? –

+0

Salut Rex M - Je veux juste savoir s'il y a un moyen de le faire en utilisant LINQ ou dois-je recourir à une procédure. –

Répondre

0

Le changement de schéma est-il une option? Mon expérience est que lors de l'enregistrement des colonnes séparées comme:

  • Date de
  • Heure de début (comme date)
  • temps d'arrêt (comme date)

... séparément, c'est un énorme l'avantage de stocker la date de manière redondante dans les colonnes Date et StartTime. Pas le moins parce que cela rend votre requête (1) plus facile à écrire, et (2) la requête peut maintenant utiliser un index.

Je l'ai fait dans les deux sens, et je préfère de loin cette méthode.

+0

Merci pour la réponse Craig. Malheureusement, je ne peux pas modifier le schéma haineux :(- En regardant l'utilisation d'une procédure stockée via les Entity Framework Extensions maintenant ... –