C# 如何访问动态类型的字段?

C# 如何访问动态类型的字段?,c#,linq,dynamic,C#,Linq,Dynamic,我试图用一个名为QueryResultViewModel的类包装查询结果,该类来自LINQ检索到的dynamic对象列表。它们包含一个名为已工作的的整数字段。我不应该使用非动态类型,因为根据查询,它有其他字段。我试过: var query = new HoursQuery( .. parameters .. ); this.Result = new ObservableCollection<QueryResultViewModel>( query.Exec

我试图用一个名为
QueryResultViewModel
的类包装查询结果,该类来自LINQ检索到的
dynamic
对象列表。它们包含一个名为
已工作的
的整数字段。我不应该使用非动态类型,因为根据查询,它有其他字段。我试过:

    var query = new HoursQuery( .. parameters .. );
    this.Result = new ObservableCollection<QueryResultViewModel>(
      query.Execute().Select( x => new QueryResultViewModel( x.Worked )));
编辑:这很有效,但可能不是很优雅

    public class HQueryDTO
    {
        public double Worked;
        public object K;
    }

    public IEnumerable<dynamic> Execute()
    {
        var list = base.Execute();
        return res = list.GroupBy(a => new { a.Employee, a.RelatedTask } )
          .Select(g => new HQueryDTO { K = g.Key, Worked = g.Sum(s => s.Duration.TotalHours) });
    }
公共类HQueryDTO
{
公共双职工制;
公共对象K;
}
公共IEnumerable Execute()
{
var list=base.Execute();
return res=list.GroupBy(a=>new{a.Employee,a.RelatedTask})
.Select(g=>newhquerydto{K=g.Key,Worked=g.Sum(s=>s.Duration.TotalHours)});
}
现在,结果有了一个类型,它可以动态返回。

我假设您在编译时得到了这个错误,在这种情况下,只需通过强制转换引入
动态

.Select(x => new QueryResultViewModel( ((dynamic)x).Worked ))

我假设
Execute
的签名类似于
objectexecute()
。如果您返回
dynamic
,它应该可以工作。

否。错误是运行时试图访问已工作的。我还不能回答自己的问题,但我用新信息编辑了它。
.Select(x => new QueryResultViewModel( ((dynamic)x).Worked ))