0

我正在尝试使用从LINQ 检索到QueryResultViewModel的对象列表中调用的类来包装查询的结果。dynamic它们包含一个名为 的整数字段Worked。我不应该使用非动态类型,因为根据查询它还有其他字段。我试过了:

    var query = new HoursQuery( .. parameters .. );
    this.Result = new ObservableCollection<QueryResultViewModel>(
      query.Execute().Select( x => new QueryResultViewModel( x.Worked )));

但我得到“'object'不包含'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) });
    }

现在结果有一个类型,它可以返回动态。

4

2 回答 2

1

假设您在编译时收到该错误,在这种情况下只需dynamic通过强制转换引入:

.Select(x => new QueryResultViewModel( ((dynamic)x).Worked ))
于 2012-05-23T10:40:15.050 回答
0

I assume that the signature of Execute is something like object Execute(). If you return dynamic, it should work.

于 2012-05-23T10:44:20.850 回答