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

の署名Executeはのようなものだと思い object Execute()ます。あなたが戻った場合dynamic、それは動作するはずです。

于 2012-05-23T10:44:20.850 に答える