2010-06-22 53 views
3

我试图做这样的事情:LINQ - 我如何给一个select对象的子对象引用它的父对象?

 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(); 

我想每个Capitalcall反对有一个参考回到它FundEntity。这可能没有创建一个循环,并手动设置每一个?

+0

在这种情况下'f'不是合法变量吗? – 2010-06-22 16:12:38

+0

很好的问题,但f不是正确的类型,即tFund(数据类生成的类)。 II需要它是类型FundEntity - 使用其数据的模型 – Shawn 2010-06-22 16:14:53

回答

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(); 

这应该给你参考。

+0

哇。我通常写在vb.net中,不知道你可以在c#中使用多行内联函数。 – Shawn 2010-06-22 16:34:16

+0

正如Tomas指出的,这可能不会转化为SQL,但在这种情况下,您总是可以将实体拉回其表格形式,然后在翻译实体时执行此操作。 – Stephan 2010-06-22 17:42:02

2

这是LINQ在内存或LINQ到实体/ SQL?

  • 在第一种情况下,你可以创建实体,然后强制性地设置其属性CapitalCalls(如从斯蒂芬的例子)

  • 在第二种情况下,恐怕没有在LINQ查询中执行此操作的方式(因为不能在创建时引用正在创建的对象,但不能使用多个语句,因为翻译器不支持该语句)。然而,你可以很容易地修改你的数据库或实体模型,以包含你需要的引用...

相关问题