2009-06-10 6 views
3

J'ai une seule table et j'ai besoin de construire un tas d'objets imbriqués basés sur la table unique.Requête Linq, comment construire des objets imbriqués à partir d'une seule table

données:

Pointa Temps PointB Mois Prix 1 2 11 11:00 10,99 1 2 12 11:00 9,99

Les objets sont

POINTS {Pointa, PointB, Détails} Détails {Mois, Détails supplémentaires} Détails supplémentaires {Temps, Prix}

Je veux éviter d'avoir des charges de boucles et si des instructions, ainsi devrait pouvoir utiliser linq pour faire ça. mais c'est au-delà de mon expérience linq.

modifier: Ceux-ci doivent grouper aswell

toute aide serait super.

Merci

Répondre

3

juste essayé une solution:

var nestedObjects = from row in data 
    select new {row.PointA, row.PointB, Details = new { 
     row.Month, ExtraDetails = new { 
      row.Time, row.Price 
     } 
    }}; 

Th C'est en supposant que vous avez déjà vos données dans les données.


Groupe par

Si vous voulez regrouper les points ensemble, vous avez besoin « Grouper par »:

var nestedObjects = from row in data 
    group row by new { row.PointA, row.PointB } into Points 
    select new { 
     Points = Points.Key, 
     Details = from details in Points 
      select new { row.Month, ExtraDetails = new { 
       row.Time, row.Price 
      }} 
    }; 

Un peu plus compliqué - bien sûr, vous voudrez peut-être un groupe par mois également, auquel cas, vous devez suivre le même modèle que pour le bit Points. Notez que cela ne crée pas de tables, car le groupe par ne le fait pas tout à fait, mais il crée au moins la structure pour vous.

0

En supposant que vous avez obtenu vos classes définies pour les objets que vous avez mentionnés, et vous avez un constructeur ou des propriétés afin que vous puissiez propery créer l'objet dans une ligne que vous pourriez avoir une requête LINQ retourner une liste de POINTS .

Si irait quelque chose lik ceci:

var res = 
    from item in table.AsEnumerable() 
    select new Points(){PointA = item["PointA"]; 
          PointB = item["PointB"]; 
          Details = from item2 in table.AsEnumberable() 
            where item["PointA"] = item2["PointA"] and item["PointB"] = item2["PointB"] 
            select new Details(){ 
                  month=item2["month"], 
                  extraDetails = from item3 in table.AsEnumerable()... 
                 } 
         }; 

A la res fin sera un IEnumerable de Points

Je suis désolé pour le code, je ne suis pas à un ordinateur avec .NET 3.5 afin Je ne peux pas écrire une requête testable appropriée

+0

Est-ce que l'objet de détails irait à l'intérieur de l'objet ponctuel? et ce groupe regroupera-t-il les Points de manière à ce qu'il n'y ait pas de répétition? –

+0

oK, maintenant j'ai vraiment compris votre question. Malheureusement, je ne connais aucune solution qui ne requerrait pas de requêtes linq imbriquées. Je vais mettre à jour mon code à quelque chose comme ça. – AlexDrenea

Questions connexes