2013-08-10 3 views
0

Je suis confronté à une situation assez complexe, il m'est donc difficile de définir un titre correct pour cette question. Je vais vous expliquer plus en détail, si nue avec moi!Réapparition toutes les x semaines

Je développe une application WPF qui utilise ORM (EntityFramework). L'application permet à l'utilisateur de planifier certaines tâches. Ces tâches peuvent se reproduire toutes les x semaines. Par exemple: Maintenance Google.com toutes les 2 semaines (à partir du lundi).

La façon dont j'ai stocké ceci est la suivante. J'ai un objet Task avec un champ nommé 'StartDate' qui est la date à laquelle la tâche est démarrée. J'ai également créé un champ nommé "Recur" (je sais que les noms pourraient être meilleurs). Le champ "Renvoyer" contient le nombre de semaines qu'une certaine tâche doit être répétée. Donc, dans mon exemple ci-dessus, il contient le numéro 2, car la maintenance sur Google.com doit être effectuée toutes les deux semaines.

Maintenant vient la situation à laquelle je fais face; Je veux que l'utilisateur puisse récupérer toutes les tâches dans un certain nombre de semaine. Par exemple: Récupérer toutes les tâches dans la semaine 42 de 2013. Si j'ai fait une tâche qui se répète chaque semaine, cela signifie que lorsque je veux récupérer toutes les tâches de la semaine 42, cette tâche doit apparaître. Il doit également apparaître lorsque je récupère toutes les tâches pour les semaines 44, 46, 48, etc.

Comment puis-je déterminer si une tâche tombe dans un numéro de semaine spécifique et la sélectionner? J'ai essayé ce qui suit:

context.Werk.Include("Debiteur").Where(o => o.Recur >= EntityFunctions.DiffDays(o.StartDate, today)/7 
                   && EntityFunctions.DiffDays(o.StartDate, today)/7 % o.Recur == 0).ToList(); 

Fondamentalement, ce que j'ai essayé de faire est de vérifier si le montant des semaines « » se reproduire est égale ou supérieure à la quantité de date diffère entre le startdate et aujourd'hui. J'ai également vérifié si le nombre de semaines diffère de la date de début et est aujourd'hui disivible par le champ 'recur'.

Je suis vraiment coincé sur cette situation et j'ai vraiment besoin de nouveaux yeux et d'un esprit pour m'aider avec cela. J'espère sincèrement avoir suffisamment clarifié mon problème.

+0

vous devez garder le temps de se reproduire à un objet TimeSpan –

+0

Pourriez-vous expliquer pourquoi plus cela ne résout pas vraiment le droit d'émission peut-être son plus bien rangé – Mittchel

Répondre

0

Je ne peux pas vous donner une réponse spécifique car woukd a besoin de plus de contexte (comme combien d'éléments sont là, existe-t-il déjà une classe qui gère le "Werk" (Je suis Néerlandais ;-)). Est-ce la collection déjà filtrée qui en Ontario, il le courant « debtor » est dans la collection ") Mais je peux vous orienter dans la bonne direction

Créer une classe de travail comme ceci:..

public class Werk 
{ 
    public bool IsRecurrungThisWeek(DateTime date) 
    { 
     // This can be implemented by yourself 
    } 

    public DateTime StartsFrom { get; set; } 
    public int Recur { get; set; } 
    public int Debiteur { get; set; } 
} 

Et faire simple Où:.?

IEnumerable<Werk> list = GetWerkObjects(); 
var aDateOfTheWeek = new DateTime(); 
var werkRecurringThisWeek = list.Where(w => w.IsRecurrungThisWeek(aDateOfTheWeek)); 
+0

Changer de 'Queryable.Where 'à' Enumerable.Whe re 'est toute une différence ... –

+0

@ ta.speot.is Vous avez raison. Cette solution dépend du contexte. Je préfère quand le nombre d'enregistrements n'est pas très élevé, si le Ienumarable peut être mis en cache pour la prochaine requête ou si vous avez déjà beaucoup de logique dans les classes existantes (comme le calcul pour les numéros de semaine). Dans d'autres scénarios, vous pourriez vouloir une solution différente. –

+0

Merci beaucoup pour votre aide. En théorie, la quantité d'objets 'Werk' pourrait être infinie. En pratique, le montant resterait inférieur à 50, je pense. @AlexSiepman: Il y a une classe Werk, mais c'est mon objet EF (ORM). Et non, la collection n'est pas filtrée. – Mittchel

Questions connexes