繁体   English   中英

linq 日期时间不包含最大值或最小值

[英]linq datetime not contain max or min

我收到这个错误,日期时间不包含 max 或 min 方法。 我正在尝试获取会议的最大和最小日期,看看它们是否相等,然后将 MeetingDate 设置为最小日期时间。 如果它们不相等,那么我会将 min StartDate 和 max StartDate 连接在一起。 下面是 output 应该是什么样子,我得到的错误是 datetime 不包含 max 或 min 方法。

class Program
    {
        static void Main(string[] args)
        {

            List<MeetingModel> Meeting = new List<MeetingModel>();

            Meeting.Add(new MeetingModel() { MeetingId = 1, startTime = new DateTime(2017, 1, 18) });
            Meeting.Add(new MeetingModel() { MeetingId = 1, startTime = new DateTime(2017, 1, 19) });
            Meeting.Add(new MeetingModel() { MeetingId = 2, startTime = new DateTime(2017, 1, 22) });
            Meeting.Add(new MeetingModel() { MeetingId = 2, startTime = new DateTime(2017, 1, 22) });
            Meeting.Add(new MeetingModel() { MeetingId = 3, startTime = new DateTime(2017, 1, 23) });
            Meeting.Add(new MeetingModel() { MeetingId = 3, startTime = new DateTime(2017, 1, 23) });
            Meeting.Add(new MeetingModel() { MeetingId = 4, startTime = new DateTime(2017, 1, 25) });
            Meeting.Add(new MeetingModel() { MeetingId = 4, startTime = new DateTime(2017, 1, 29) });


            var result =  Meeting
                          .Select (p=> new MeetingViewModel
                          {
                             MeetingId = p.MeetingId,
                             MeetingDate = p.startTime.Max() == p.startTime.Min() ? p.startTime.Min().ToString("MM/dd/yyyy") :
                                        string.Format("{0: MM/dd/yyyy} - {1: MM/dd/yyyy}", p.startTime.Min(), p.startTime.Max()
                          }).ToList();

            foreach (var meeting in result)
            {

                Console.WriteLine("{0}", meeting.MeetingId);
                Console.WriteLine("{0}", meeting.MeetingDate);
            }
        }


        class MeetingModel
        {
            public int MeetingId { get; set; }
            public DateTime startTime { get; set; }        
        }

        class MeetingViewModel
        {
            public int MeetingId { get; set; }
            public string MeetingDate { get; set; }
        }
    }

错误

严重性代码 描述 项目文件行抑制 State 抑制 State 错误 CS1929 'DateTime' 不包含 'Max' 的定义和最佳扩展方法 'Enumerable.Max(IEnumerable')' 需要接收器类型

在此处输入图像描述

Output

Meeting 1 2017/1/18 - 2017/1/19
Meeting 2 2017/1/22
Meeting 3 2017/1/23
Meeting 4 2017/1/25 - 2017/1/29

英孚

select new Model.Meeting
                       {
                           MeetingId = m.MeetingId,
                           GroupId = m.GroupId,
                           MeetingDate = m.Min(x => x.startTime) == m.Max(x => x.startTime) ?
                                         m.Max(x => x.startTime).ToString("MM/dd/yyyy") :
                                        string.Format("{0: MM/dd/yyyy} - {1: MM/dd/yyyy}", 
                                        md.Min(x => x.startTime), md.Max(x => x.startTime))
                       }).GroupBy(x => x.MeetingId).ToList();

您可以按MeetingId分组并使用.Min.Max方法来获取日期:

var result = Meeting
    .GroupBy(x => x.MeetingId)
    .Select(p => new MeetingViewModel
    {
        MeetingId = p.Key,
        MeetingDate = p.Min(x => x.startTime) == p.Max(x => x.startTime) ?
            p.Max(x => x.startTime).ToString("MM/dd/yyyy") :
            string.Format("{0: MM/dd/yyyy} - {1: MM/dd/yyyy}", p.Min(x => x.startTime), p.Max(x => x.startTime))
    }).ToList();

在 dotnetfiddle 中测试: https://dotnetfiddle.net/IJaehf

我希望你觉得这有帮助。

请尝试DateTime.MinValueSqlDateTime.MinValue 这些实现为static readonly字段而不是方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM