0

最小の日時を取得してから最大の日時を取得し、2 つを比較しようとしています。しかし、LINQ から DateTime 値を抽出しようとすると、次のエラーが発生します。どんな助けでも大歓迎です。

次の行でエラーがスローされます: appChartDateStart = Convert.ToDateTime(dateStartType);

アラン

タイプ 'WhereSelectEnumerableIterator 2[System.Linq.IGrouping2 [System.DateTime,LatencyApp.Domain.Models.ChartHist],<>f__AnonymousType2`1[System.DateTime]]' のオブジェクトをタイプ 'System.IConvertible' にキャストできません。

私のコード:

        DateTime appChartDateStart = DateTime.MinValue;
        DateTime appChartDateEnd = DateTime.MinValue;
        var dateStartType = from row in myRow
                                group row by row.LoginDateTime_Rounded into g
                                select new { MinDateTime = g.Min(row => row.LoginDateTime_Rounded) };
        var dateEndType = from row in myRow
                                group row by row.LoginDateTime_Rounded into g
                                select new { MinDateTime = g.Max(row => row.LoginDateTime_Rounded) };
        appChartDateStart = Convert.ToDateTime(dateStartType);
        appChartDateEnd = Convert.ToDateTime(dateEndType);
        TimeSpan difAppChart = appChartDateEnd - appChartDateStart;
4

2 に答える 2

1

Thats because your select is creating an anonymous type with a property MinDateTime. The Convert.TomDateTime method does not know how to convert this anonymous type. Try doing:

DateTime appChartDateStart = DateTime.MinValue;
DateTime appChartDateEnd = DateTime.MinValue;
var dateStartType = (from row in myRow
                        group row by row.LoginDateTime_Rounded into g
                        select new { MinDateTime = g.Min(row => row.LoginDateTime_Rounded) }).FirstOrDefault();
var dateEndType = (from row in myRow
                        group row by row.LoginDateTime_Rounded into g
                        select new { MinDateTime = g.Max(row => row.LoginDateTime_Rounded) }).FirstOrDefault();
appChartDateStart = Convert.ToDateTime(dateStartType);
appChartDateEnd = Convert.ToDateTime(dateEndType);
TimeSpan difAppChart = appChartDateEnd - appChartDateStart;
于 2013-02-22T13:25:05.787 に答える
1

私は LINQ シンタックスでそれを行いましたが、かなりうまく機能し、少しクリーンでもありました。

DateTime appChartDateStart = DateTime.MinValue;
DateTime appChartDateEnd = DateTime.MinValue;

var dateStartType = myRow.GroupBy(x => x.LoginDateTime_Rounded).Select(x => x.Key).Min();
var dateEndType = myRow.GroupBy(x => x.LoginDateTime_Rounded).Select(x => x.Key).Max();

TimeSpan difAppChart = appChartDateEnd - appChartDateStart;

完成したコード:

        DateTime appChartDateStart = DateTime.MinValue;
        DateTime appChartDateEnd = DateTime.MinValue;
        if (histByApp.Count() != 0)
        {
            var dateStartType = histByApp.GroupBy(x => x.LoginDateTime_Rounded).Select(x => x.Key).Min();
            var dateEndType = histByApp.GroupBy(x => x.LoginDateTime_Rounded).Select(x => x.Key).Max();
            appChartDateStart = Convert.ToDateTime(dateStartType);
            appChartDateEnd = Convert.ToDateTime(dateEndType);
        }
        TimeSpan difAppChart = appChartDateEnd - appChartDateStart;
于 2013-02-22T13:32:19.590 に答える