Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 林克选择了许多日期_C#_Linq - Fatal编程技术网

C# 林克选择了许多日期

C# 林克选择了许多日期,c#,linq,C#,Linq,我正在构建此viewmodel,但我不确定如何选择下面示例中的所有会议日期列表。我还需要将字符串格式化为完整的月份。任何帮助都会很好 List<Meeting> Meeting = new List<Meeting>(); List<MeetingDates> ListOfMeetingDates = new List<MeetingDates>(); ListOfMeetingDates.Add(new MeetingDates() { Meet

我正在构建此viewmodel,但我不确定如何选择下面示例中的所有会议日期列表。我还需要将字符串格式化为完整的月份。任何帮助都会很好

List<Meeting> Meeting = new List<Meeting>();
List<MeetingDates> ListOfMeetingDates = new List<MeetingDates>();
ListOfMeetingDates.Add(new MeetingDates() { MeetingDatesId = 1, StartDate= "11-1-2020"});
ListOfMeetingDates.Add(new MeetingDates() { MeetingDatesId = 2, StartDate = "11-2-2020" });
Meeting.Add(new Meeting() { Meetingid = 1, MeetingName="a",ListOfMeetingDates= ListOfMeetingDates });
ListOfMeetingDates.Clear();
ListOfMeetingDates.Add(new MeetingDates() { MeetingDatesId = 3, StartDate = "11-5-2020" });
Meeting.Add(new Meeting() { Meetingid = 2, MeetingName = "b", ListOfMeetingDates = ListOfMeetingDates });

var listOfMeetings = Meeting
.Select(x => new MeetingViewModel
    {
    MeetingName = x.MeetingName,
    MeetingDate = x.ListOfMeetingDates.SelectMany(z => z.StartDate)
    }).ToList();


        class Meeting
        {
            public int Meetingid { get; set; }
            public string MeetingName { get; set; }

            public List<MeetingDates> ListOfMeetingDates { get; set; }
        }

        class MeetingDates
        {
            public int MeetingDatesId { get; set; }
            public string StartDate { get; set; }
        }



        class MeetingViewModel
        {
            public string MeetingName { get; set; }
            public string MeetingDate { get; set; }
        }
这样行吗

仅获取字符串中的开始日期和结束日期
var listOfMeetings=会议
.选择(x=>new MeetingViewModel
{
MeetingName=x.MeetingName,
MeetingDate=GetDateRangeFormatted(x.MeetingDates)
})
.ToList();
私有字符串GetDateRangeFormatted(IEnumerable meetingDates)
{
if(meetingDates.Count()==0)
返回字符串.empty;
if(meetingDates.Count()==1)
返回会议日期.First().StartDate;
//这只有在日期排序正确的情况下才有效
返回$“{meetingDates.First().StartDate}-{meetingDates.Last().StartDate}”;
}
获取字符串中的所有日期
var listOfMeetings=会议
.选择(x=>new MeetingViewModel
{
MeetingName=x.MeetingName,
MeetingDate=string.Join(
" - ", 
x、 会议日期列表。选择(d=>d.StartDate)
})
.ToList();
不过,我建议您稍微更改一下模型,以便更好地操纵/格式化日期:

班级会议日期
{
public int MeetingDatesId{get;set;}
public DateTime StartDate{get;set;}//注意DateTime而不是字符串
}
静态void Main(字符串[]args)
{
列表会议=新列表();
List ListOfMeetingDates1=新列表();
添加(新的会议日期(){MeetingDatesId=1,StartDate=“11-1-2020”});
添加(新的会议日期(){MeetingDatesId=2,StartDate=“11-2-2020”});
添加(新的会议日期(){MeetingDatesId=3,StartDate=“11-3-2020”}); 添加(新的会议日期(){MeetingDatesId=4,StartDate=“11-4-2020”}); 添加(新的会议日期(){MeetingDatesId=5,StartDate=“11-5-2020”}); 添加(新会议(){Meetingid=1,MeetingName=“a”,ListOfMeetingDates=ListOfMeetingDates1})

List ListOfMeetingDates2=新列表();
添加(新的会议日期(){MeetingDatesId=3,StartDate=“11-5-2020”});
添加(新会议(){Meetingid=2,MeetingName=“b”,ListOfMeetingDates=ListOfMeetingDates2});
var expectedOutput=Meeting.Select(e=>newmeetingviewmodel
{
MeetingName=e.MeetingName,
MeetingDates=e.ListOfMeetingDates.Count==0?字符串。空:
(e.ListOfMeetingDates.Count==1?DateUtilities.ToStringDateTime(Convert.ToDateTime(e.ListOfMeetingDates[0].StartDate),“MM-dd-yyyy”):
e、 会议日期列表。选择(md=>md.StartDate)。聚合((s1,s2)=>
(!s1.包含(“,”)?
DateUtilities.ToStringDateTime(Convert.ToDateTime(s1),“MMMM dd yyyy”):s1.ToString()
+“,”+DateUtilities.ToStringDateTime(Convert.ToDateTime(s2),“MMMM-dd-yyyy”))
}).ToList();
Console.ReadKey();
}
}
班会
{
public int Meetingid{get;set;}
公共字符串MeetingName{get;set;}
会议日期的公共列表{get;set;}
}
班级会议日期
{
public int MeetingDatesId{get;set;}
公共字符串StartDate{get;set;}
}
类会议视图模型
{
公共字符串MeetingName{get;set;}
公共字符串MeetingDates{get;set;}
}
公共静态类实用程序
{
公共静态字符串ToStringDateTime(日期时间日期时间,字符串格式)
{
return dateTime.ToString(格式);
}
}

您在寻找什么,如
var latestDate=ListOfMeetingDates.Max(m=>m.StartDate);
?W.r.t.“整整一个月”,看一看。如果集合中有三个StartDate呢?在这种情况下,您的输出需要是什么样的?MeetingDate=2020年11月1日-2020年11月2日-2020年11月3日噢,在这种情况下,它更简单-
字符串。Join
会有所帮助,我已经更新了我的答案如果MeetingDates列表中有三个值呢?
MeetingName = a
MeetingDate = November 1 2020 - November 2 2020
MeetingName = b
MeetingDate = November 5 2020
  static void Main(string[] args)
    {
        List<Meeting> Meeting = new List<Meeting>();
        List<MeetingDates> ListOfMeetingDates1 = new List<MeetingDates>();
        ListOfMeetingDates1.Add(new MeetingDates() { MeetingDatesId = 1, StartDate = "11-1-2020" });
        ListOfMeetingDates1.Add(new MeetingDates() { MeetingDatesId = 2, StartDate = "11-2-2020" });
        List<MeetingDates> ListOfMeetingDates2 = new List<MeetingDates>();

        ListOfMeetingDates2.Add(new MeetingDates() { MeetingDatesId = 3, StartDate = "11-5-2020" });
        Meeting.Add(new Meeting() { Meetingid = 2, MeetingName = "b", ListOfMeetingDates = ListOfMeetingDates2 });

         var expectedOutput = Meeting.Select(e => new MeetingViewModel
        {
            MeetingName = e.MeetingName,
            MeetingDates = e.ListOfMeetingDates.Count == 0 ? string.Empty :
                (e.ListOfMeetingDates.Count == 1 ? DateUtilities.ToStringDateTime(Convert.ToDateTime(e.ListOfMeetingDates[0].StartDate), "MMMM dd yyyy") :
           e.ListOfMeetingDates.Select(md => md.StartDate).Aggregate((s1, s2) =>
           (!s1.Contains(",") ?
           DateUtilities.ToStringDateTime(Convert.ToDateTime(s1), " MMMM dd yyyy") : s1.ToString())
           + "," + DateUtilities.ToStringDateTime(Convert.ToDateTime(s2), "MMMM dd yyyy")))
        }).ToList();

        Console.ReadKey();
    }
}



class Meeting
{
    public int Meetingid { get; set; }
    public string MeetingName { get; set; }

    public List<MeetingDates> ListOfMeetingDates { get; set; }
}

class MeetingDates
{
    public int MeetingDatesId { get; set; }
    public string StartDate { get; set; }
}



class MeetingViewModel
{
    public string MeetingName { get; set; }
    public string MeetingDates { get; set; }
}

public static class DateUtilities
{
    public static string ToStringDateTime(DateTime dateTime, string format)
    {
        return dateTime.ToString(format);
    }
}