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