2010-06-04 7 views
0

Je dois requête suivante LINQ, où je cherche des différents horodatages dans un DB:aide WDDCEDEEIWEB201to trouver horodatages associés de la base de données

var issues = 
    from i in ReadOnlyContext.Issues 
    where i.TruckID == truckID && i.OutOfOrderStart < startDate && 
     i.OutOfOrderEnd > endDate || 
     i.TruckID == truckID && i.OutOfOrderStart > startDate && 
     i.OutOfOrderEnd < endDate || 
     i.TruckID == truckID && i.OutOfOrderStart < startDate && 
     i.OutOfOrderStart < endDate || 
     i.TruckID == truckID && i.OutOfOrderStart > startDate && 
     i.OutOfOrderEnd > endDate 
    select i; 

Mon problème est que je voudrais filtrer la requête, pour retourner uniquement entrées, où OutOfOrderStart et OutOfOurderEnd proviennent de la même ligne. Comment puis-je accomplir cela?

Répondre

0

Salut et merci pour la réponse :)

Je n'ai pas vérifié si le OutOfOrderEnd ou départ a été inclus aussi .. Mais Je peux être beaucoup plus simple:

var issues = 
    from i in ReadOnlyContext.Issues 
    let startInside = (startDate < i.OutOfOrderStart && i.OutOfOrderStart < endDate) 
    let endInside = (startDate < i.OutOfOrderEnd && i.OutOfOrderStart < endDate) 
    let allOutside = (startDate > i.OutOfOrderEnd && endDate < i.OutOfOrderEnd) 
    where i.TruckID == truckID && (startInside || endInside || allOutside) 
select i; 
0

Toutes ces comparaisons sont des comparaisons sur la même ligne. Votre instruction dit de trouver chaque ligne, i, de telle sorte que le TruckID de la ligne it est égal à truckID (notez que vous n'avez pas besoin de répéter ce test dans chaque sous-condition) et dont les dates de début/fin correspondent à l'un des sous-conditions. Si vous n'obtenez pas les données que vous attendez, je suppose que vos conditions ne correspondent pas à vos besoins.

En utilisant la loi distributive, vous pouvez réécrire comme:

var issues = 
    from i in ReadOnlyContext.Issues 
    where i.TruckID == truckID && 
     (i.OutOfOrderStart < startDate && i.OutOfOrderEnd > endDate 
     || i.OutOfOrderStart > startDate && i.OutOfOrderEnd < endDate 
     || i.OutOfOrderStart < startDate && i.OutOfOrderStart < endDate 
     || i.OutOfOrderStart > startDate && i.OutOfOrderEnd > endDate) 
    select i; 
+0

Corrigez-moi si je me trompe, mais il semble qu'au moins l'une des quatre dernières conditions soit toujours assortie, donc elles ne font rien vraiment. – kahoon

+0

@kahoon - Je n'ai pas fait de table de vérité pour les conditions, donc vous avez peut-être raison. Étant donné que la question ne répond pas vraiment à l'objectif de la requête, il est difficile de savoir si elle est correcte. La réponse de l'OP n'a pas vraiment aidé non plus puisque les conditions ne semblent pas refléter ce qu'il les a nommées. – tvanfosson

Questions connexes