如何访问动态类型的字段
本文关键字:动态 类型 字段 访问 何访问 | 更新日期: 2023-09-27 18:35:08
我正在尝试将查询结果包装为 LINQ 检索的dynamic
对象列表中名为 QueryResultViewModel
的类。它们包含一个名为 Worked
的整数字段。我不应该使用非动态类型,因为根据查询,它还有其他字段。我试过了:
var query = new HoursQuery( .. parameters .. );
this.Result = new ObservableCollection<QueryResultViewModel>(
query.Execute().Select( x => new QueryResultViewModel( x.Worked )));
但是我得到"'对象'不包含'工作'的定义",我不知道是否可以在不更改查询的返回类型的情况下修复它。
执行代码也可能很有用:
var res = some_list.GroupBy(a => new { a.Employee, a.RelatedTask, a.Start.Month })
.Select(g => new { K = g.Key, Worked = g.Sum(s => s.Duration.TotalHours) });
编辑:这很好用,但也许不是很优雅。
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) });
}
现在结果有一个类型,它可以动态返回。
我假设你在编译时得到这个错误,在这种情况下,只需通过强制转换引入dynamic
:
.Select(x => new QueryResultViewModel( ((dynamic)x).Worked ))
我假设Execute
的签名类似于object Execute()
。如果您返回dynamic
,它应该可以工作。