Je me bats avec une colonne datetime annulable [DateInsp] dans une application ASP.NET qui utilise SubSonic3, Linq, MS SQL Server 2005.groupement Linq par datetime annulable et utilisant comme critères
J'ai eu tout cela de travail lorsque la colonne datetime [DateInsp] n'autorise pas les valeurs NULL. Une nouvelle exigence m'a forcé à définir la colonne [DateInsp] pour autoriser les valeurs nulles et maintenant j'ai du mal à faire fonctionner correctement cette fonctionnalité.
Problème 1: Je dois d'abord rendre une liste déroulante des 7 dernières dates d'inspection pour un inspecteur donné (ce qui est une liste groupée des 7 dates les plus récentes pour l'inspecteur). Voici le TSQL que je dois convertir à la syntaxe LINQ:
declare @InspectorID varchar(5)
set @InspectorID = 'GPA'
select top 7 convert(nvarchar(30), [DateInsp], 101) InspectedDate
from [dbo].[IncomingInspection]
group by [InspectorID], convert(nvarchar(30), [DateInsp], 101)
having [InspectorID] = @InspectorID
order by convert(nvarchar(30), [DateInsp], 101) desc
Si je ne peux pas obtenir ce travail correctement LINQ, mais je peux/pourrait construire une procédure stockée pour retourner la liste des dates et que jeter dans une liste déroulante. C'est suffisant. Je me suis battu avec la syntaxe Linq donc toute aide dans ce domaine est grandement appréciée.
Problème 2: J'ai besoin d'utiliser la date sélectionnée dans la liste déroulante mentionnée ci-dessus pour tirer les enregistrements corrects pour cet inspecteur et la date correcte. Encore une fois, ceci est un champ datetime nullable et c'est un vrai point de friction pour moi.
Voici était la syntaxe LINQ originale qui a accompli l'exigence avant que je devais changer le champ datetime pour allow nulls:
Dim query = (From i In db.IncomingInspections _
Where i.InspectorID = User.Identity.Name _
Group By Key = New With {i.DateInsp} Into Group _
Order By Key.DateInsp Descending _
Select Key = New With {.DateInsp = Key.DateInsp.ToShortDateString}).Take(7)
Cette application est écrit en VB.NET et utilise une syntaxe LINQ qui à la fois faire mon mal de tete. Si vous pouvez offrir la syntaxe C# pour cela, je peux le traduire moi-même sur VB.NET.
EDIT:
Pour une raison quelconque, je ne peux pas utiliser la propriété .Value; Je reçois: Le membre « Value » est pas pris en charge
je reçois: « syntaxe incorrecte près de « < ». » si j'essaie d'ajouter la comparaison de date à la clause where aussi.
FIN EDIT
Merci Beaucoup,
Josh
J'ai omis de mentionner que la colonne DateInspected a un composant de temps que je dois omettre lors du remplissage de la liste déroulante. En outre, l'utilisateur aura toujours une date sélectionnée dans la liste déroulante. La liste déroulante aura une liste des 7 dernières dates (date seulement, pas de temps) des dossiers d'inspection sur lesquels ils ont travaillé. La date sélectionnée sera utilisée dans l'énoncé de critère de la deuxième requête. Note: la clause de critères devra tenir compte de la date sélectionnée (sans temps). J'ai essayé d'utiliser une plage de dates comme suit: Et (x.DateInsp> = RangeStart Et x.DateInsp <= RangeEnd) sans succès ... – joshblair