1

正常にコンパイルされますが、LINQ クエリの結果を繰り返し処理しようとすると、そのような例外が発生しましThe group by operation contains an expression that cannot be translated た。クエリは

var query0 = from c in dc.Prices
              where Convert.ToDateTime(c.data).CompareTo(left) >= 0
              && Convert.ToDateTime(c.data).CompareTo(right) <= 0
              && c.idsticker.Equals(x)
            group c by new { ((DateTime)c.data).Year, ((DateTime)c.data).Month }
                  into groupMonthAvg
                  select new
                  {
                      years = groupMonthAvg.Key.Year,
                      months = groupMonthAvg.Key.Month,
                      prices = groupMonthAvg.Average(i => i.value)
                  };

関数のどの式group byが間違っていますか?

4

2 に答える 2

3

これを試して:

var query0 = from c in dc.Prices
             let date = Convert.ToDateTime(c.data)
             where date.CompareTo(left) >= 0 && date.CompareTo(right) <= 0 && c.idsticker.Equals(x)
             group c by new { date.Year, date.Month } into groupMonthAvg
             select new
             {
                 years = groupMonthAvg.Key.Year,
                 months = groupMonthAvg.Key.Month,
                 prices = groupMonthAvg.Average(i => i.value)
             };
于 2012-07-10T22:38:43.073 に答える
1

dataこれは、の列Priceが文字列または 以外の他の型であるためだと思いDateTimeます。

代わりに(DateTime)c.data)キャストを aに変更してみてください。Convert.ToDateTime(c.data)

Linq-SQL トランスレータがキャストをサポートしているかどうかはわかりません。

DateTime日時値を格納する場合は、可能であれば、データベースの基になるデータ型を に変更します。

于 2012-07-10T22:37:21.000 に答える