J'ai une relation parent/table enfant avec la table enfant reliée à ParentTable via la clé étrangère ParentId. Il y a plusieurs enregistrements dans ChildTable pour chaque enregistrement ParentTable. Pour ceux d'usage vous aimez les visuels rudimentaires, voici le schéma.Utilisation de Linq2SQL pour renvoyer des données de table parent, mais triées par données de table enfant
ParentTable
------------
+Id
Date
ChildTable
------------
+Id
ParentId
Date
Ce que je suis en train de faire est de revenir seul enregistrement pour chaque élément ParentTable qui est jointe à la valeur de la date de la dernière ChildTable (Note, pas de valeur Date du parent). Les résultats devraient ressembler à:
ParentTable::Id ParentTable::Foo ChildTable:Id ChildData::Foo ChildData::Date
--------------- ---------------- ------------- -------------- ---------------
55 Other Values 700 Other values 12/1/2010
1 " 1000 " 11/30/2010
10 " 214 " 10/31/2010
Il est important que le ChildData :: Date soit trié par ordre décroissant.
Cela semble être simple, mais je suis aux prises avec les aspects LinQ2SQL. J'attends toujours mon moment "ah-ha" quand je peux penser à Linq.
est ici la réponse finale, grâce à Winston:
var results =
from p in parent
join c in (from c2 in child orderby c2.Date descending select c2)
on p.Id equals c.ParentId into childGroup
select new { ParentId=p.Id, ParentDate=p.Date, ChildDate=childGroup.First().Date } into NewResult
orderby NewResult.Activity descending
select NewResult
Ahhh ... remercie Winston pour l'édition. Je me préparais juste à poser quelques questions. – taudep
Je pense que je l'ai fonctionné. Il semble que l'on fasse un choix pour chaque ROW dans les résultats. Je me demande s'il existe un moyen d'optimiser cela? Je pourrais renvoyer plus de 100 lignes de ces données. – taudep
En fait, ça ne marche pas vraiment. Si la table enfant a deux éléments pour un PARENT donné, elle retourne les deux. Où se passe l'unicité? – taudep