【问题标题】:Find Min DateTime and Assign DateTime to Local Variable查找 Min DateTime 并将 DateTime 分配给局部变量
【发布时间】:2013-02-23 00:59:55
【问题描述】:

我正在尝试获取最小日期时间,然后是最大日期时间并比较两者。但是,当我尝试从 LINQ 中提取 DateTime 值时出现以下错误。任何帮助将不胜感激。

在这一行抛出错误:appChartDateStart = Convert.ToDateTime(dateStartType);

艾伦

无法将“WhereSelectEnumerableIterator2[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;

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    我是在 LINQ sintax 中做的,效果很好,而且更简洁:

    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;
    

    【讨论】:

    • 编辑您的答案并将其包含在最后。
    【解决方案2】:

    那是因为您的选择正在创建具有属性 MinDateTime 的匿名类型。 Convert.TomDateTime 方法不知道如何转换这种匿名类型。尝试做:

    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;
    

    【讨论】:

    • 感谢您的回复。这不适合我。
    • 对了,我忘了它是一个集合与单个对象。试试我修改后的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2019-03-20
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多