我正在尝试使用LINQ检索的QueryResultViewModel
对象列表中的一个名为dynamic
的类来包装查询结果。它们包含一个名为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) });
}
现在结果有一个类型,它可以动态返回。
答案 0 :(得分:1)
我假设你在编译时遇到错误,在这种情况下只需通过强制转换引入dynamic
:
.Select(x => new QueryResultViewModel( ((dynamic)x).Worked ))
答案 1 :(得分:0)
我认为Execute
的签名类似object Execute()
。如果您返回dynamic
,它应该有效。