2013-01-14 69 views
0

我必须填写以下类LINQ查询ExpandoObject与选择条款

public class Emp    
{  
    public string name {get; set;}  
    public dynamic Obj { get; set; }  
    public Emp() 
    { 
     Obj = new ExpandoObject(); 
    } 
} 

public LoadData() 
{ 
    var emp = (from d in dbContext.Employees   
       select new Emp 
       { 
       name = d.name, 
       Obj.DOB = d.DOB, 
       Obj.BirthPlace = d.BirthPlace 
       }).ToList(); 

} 

OR 

    public LoadData() 
    { 
     var emp = (from d in dbContext.Employees   
        select new Emp 
        { 
        name = d.name, 
        Obj.DOB = new ExpandoObject { DOB = d.DOB, BirthPlace = d.BirthPlace }  }).ToList(); 

    } 

它不允许我指定动态性能上面一样,任何人都可以请帮助我如何实现这一目标?

回答

0

VAR EMP =(从d
选择新的Emp
{
名= d.name,
的OBJ = {DOB = d.DOB,出生地= d.BirthPlace}
})ToList();

2

试试这个方法:

var emp = (from d in dbContext.Employees   
      select new Emp 
      { 
      name = d.name, 
      Obj = { DOB = d.DOB, BirthPlace = d.BirthPlace } 
      }).ToList(); 

这是非常相似的@gowansg答案,但没有new关键字。它只是设置属性的值。如果我们尝试获得TypeObj,我们将收到System.Dynamic.ExpandoObject。与new关键字它将是一些匿名类型。 分别这样的构造,如:

emp[0].Obj.OtherProperty = 1; 

将在使用匿名类型的情况下失败。

+0

好的。我没有考虑到后果,而是习惯性地输入了“新”。 – gowansg

+0

如果我们想要使用linq的查询结构,例如dbContext.Employees中的d,那么该怎么办...... –

+0

@Tejas Patel,你的意思是'方法链'吗?在这个例子中''dbContext.Employees'构造中的d已经被使用了。 –

0

你在你的第二个例子接近,你只需要设置Obj等于new anonymous object而不是new ExpandoObject:在dbContext.Employees

var emp = (from d in dbContext.Employees   
      select new Emp 
      { 
      name = d.name, 
      Obj = new { DOB = d.DOB, BirthPlace = d.BirthPlace } 
      }).ToList(); 
+0

@Tejas将'Obj'声明为'dyanmic'而不是'EpxandoObject',这就是为什么这是有效的。如果@Tejas使用这种方法,他应该记住'Obj'现在是'匿名类型'而不是'ExpandoObject',就像@Alexander指出的那样。 – gowansg