Il devrait y avoir une simple requête Linq pour ce que j'essaie d'accomplir, mais je produis un code moche.Aidez-moi à construire cette déclaration Linq
J'ai deux tables, une de problèmes et une autre d'état de problème. Il existe une relation un-à-plusieurs entre le problème et l'état du problème. Quand un problème est créé, un IssueStatus est également créé avec le champ d'état défini sur «Open» lorsqu'il est fermé, un autre IssueStatus est créé avec le champ d'état défini sur «Closed» ... mais les problèmes peuvent être rouverts. Il semble que je devrais pouvoir écrire quelque chose comme ceci:
public static List<Issue> FindOpenIssues(this IList<Issue> issues) {
return (
from issue in issues
from issueStatus in issue.issueStatus.OrderByDescending(x=>x.CreatedOn).Single()
where issueStatus.Status == "Open"
select issue
).ToList();
}
Cela échoue évidemment, mais il doit y avoir une manière propre à le faire? Merci! Edit: Comme le souligne Reed Copsey, mon intention est de trouver les problèmes en cours. Un problème peut contenir un élément "Ouvrir" et à une date ultérieure, un élément "Fermé" ... c'est pourquoi un simple Où = "Ouvrir" ne fonctionnera pas, il doit trouver l'élément avec la date la plus récente dans la liste pour déterminer l'état du problème.
Est-ce que ** chaque ** problème n'est pas ouvert au moins à la fois? Donc, cela sélectionnerait tous les problèmes, non? – dtb
dtb: Pas si les problèmes sont marqués comme étant fermés après qu'ils ont été complétés. Bien que j'ai réécrit pour fournir le comportement original ... –
Merci, fonctionne parfaitement! Juste testé contre mon projet. Vous avez raison, OrderBy aurait dû être OrderByDescending. –