2010-06-22 2 views
3

Je suis en train de faire quelque chose comme ceci:LINQ - Comment puis-je donner à un objet enfant dans une instruction select une référence à son parent?

 List<FundEntity> entities = this.tFunds 
      .Select(f => new FundEntity() { 
       ID = f.fundID, 
       Name = f.name, 
       CapitalCalls = f.tCapitalCalls 
        .Select(cc => new CapitalCall() { 
         ID = cc.capitalCallID, 
         Description = cc.description, 
         FundEntity = // Should be the newly created Fund Entity object 
        }).ToList()     
      }).ToList(); 

Je voudrais que le chaque Capitalcall objet d'avoir une référence à son FundEntity. Est-ce possible sans créer de boucle et en réglant chacun manuellement?

+0

Est-ce que 'f' n'est pas une variable légale dans ce contexte? –

+0

bonne question, mais f n'est pas le bon type, c'est de tFund (une classe générée par classe de données). II besoin d'être de type FundEntity - un modèle qui utilise ses données – Shawn

Répondre

6
List<FundEntity> entities = this.tFunds 
     .Select(f => 
     { 
      var parent = new FundEntity() { 
       ID = f.fundID, 
       Name = f.name, 
       }; 
      parent.CapitalCalls = f.tCapitalCalls 
        .Select(cc => new CapitalCall() { 
        ID = cc.capitalCallID, 
        Description = cc.description, 
        FundEntity =parent // Should be the newly created Fund Entity object 
       }); 
      return parent; 
     }.ToList()     
     ).ToList(); 

Cela devrait vous donner la référence.

+0

oh wow. J'écris habituellement dans vb.net, je ne savais pas que vous pouviez faire des fonctions en ligne multilignes en C#. – Shawn

+0

Comme Tomas l'a noté, cela ne se traduira probablement pas par SQL, mais dans ce cas, vous pouvez toujours simplement retirer les entités dans leurs formulaires de table, puis le faire dans la traduction vers l'entité. – Stephan

2

Est-ce LINQ en mémoire ou LINQ to Entities/SQL?

  • Dans le premier cas, vous pouvez simplement créer l'entité et définir sa propriété CapitalCalls impérieusement (comme dans l'exemple de Stephan)

  • Dans le second cas, je crains qu'il n'y ait pas C'est ce que vous pouvez faire dans la requête LINQ (car vous ne pouvez pas faire référence à l'objet que vous créez pendant sa création, mais vous ne pouvez pas utiliser plusieurs instructions, car le traducteur ne le gère pas). Cependant, vous pouvez facilement modifier votre base de données ou votre modèle d'entité pour contenir la référence dont vous avez besoin ...

Questions connexes