У меня есть этот код для сравнения двух значений DateTime:
DateTime currentWeek = Convert.ToDateTime(comboBoxWeekToSchedule.SelectedValue);
List<Student> thisWeeksStudents = (List<Student>)studentsList.Where(i => i.WeekOfLastAssignment.Equals(currentWeek));
Наиболее подходящим членом класса Student для этого обсуждения является:
public DateTime WeekOfLastAssignment { get; set; }
После этой строки:
DateTime currentWeek = Convert.ToDateTime(comboBoxWeekToSchedule.SelectedValue);
... выполняется, значение "currentWeek" равно "22.02.2016 00:00:00"
Я пытаюсь отфильтровать общий список для элементов, чей элемент «WeekOfLastAssignment» соответствует значению «currentWeek»; они представлены (в отладчике) как "{8/14/2015 22:52:55"
IOW, они, похоже, имеют одинаковый формат (за исключением включения «{» и «}», что, я сомневаюсь, является проблемой).
Я вижу, что точных совпадений может и не быть, так как значения поля со списком всегда имеют полночь в качестве элемента времени. Так что, возможно, мне придется выполнить операцию LINQ типа «LIKE%» (может быть, «Содержит»?), но первая проблема заключается в том, чтобы обойти это недопустимое приведение.
Это точный текст ошибки, которую я получаю после попытки присвоения общему списку с именем «thisWeeksStudents»:
System.InvalidCastException was unhandled
HResult=-2147467262
Message=Unable to cast object of type 'WhereListIterator`1[AYttFMScheduler.Student]' to type 'System.Collections.Generic.List`1[AYttFMScheduler.Student]'.
Что мне нужно сделать, чтобы исправить эту ситуацию?
Если это уместно, comboBoxWeekToSchedule заполняется такими значениями:
private void PopulateComboBoxWithSchedulableWeeks()
{
int WEEKS_TO_OFFER_COUNT = 13;
List<String> schedulableWeeks = AYttFMConstsAndUtils.GetWeekBeginnings(WEEKS_TO_OFFER_COUNT).ToList();
BindingSource bs = new BindingSource();
bs.DataSource = schedulableWeeks;
comboBoxWeekToSchedule.DataSource = bs;
}
public static List<String> GetWeekBeginnings(int countOfWeeks)
{
// from http://stackoverflow.com/questions/6346119/datetime-get-next-tuesday
DateTime today = DateTime.Today;
// The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7;
DateTime nextMonday = today.AddDays(daysUntilMonday);
List<String> mondays = new List<string>();
// Need all Mondays, even though 1st Monday is BR only
if (!IsAssemblyOrConventionWeek(nextMonday))
{
mondays.Add(nextMonday.ToLongDateString());
}
for (int i = 0; i < countOfWeeks; i++)
{
nextMonday = nextMonday.AddDays(7);
if (!IsAssemblyOrConventionWeek(nextMonday))
{
mondays.Add(nextMonday.ToLongDateString());
}
}
return mondays;
}
studentsList
этоList<Student>
или этоobject
? - person Ian   schedule 18.02.2016studentsList
нельзя преобразовать вStudent
. Что произойдет, если вы получите доступ к одному элементуstudentsList
по индексу и попытаетесь привести его к типуStudent
? - person khargoosh   schedule 18.02.2016studentsList.Where(i => i.WeekOfLastAssignment.Equals(currentWeek)).ToList()
- person bkdev   schedule 18.02.2016