#c# #datetime #int
#c# #datetime #int
Вопрос:
Я использую Entity Framework в качестве своего ORM. Я пытаюсь получить все экземпляры grade, где GradeInstanceId равен X, а Year равен this year .
int currentYear = DateTime.Now.Year;
private void LoadGradeInstances()
{
GradeInstanceRepository repo = new GradeInstanceRepository();
int gradeId = 5; //For example.
cmbGradeInstance.DataSource = repo.FindAll().Where(g => g.GradeId == gradeID amp;amp; g.Year == currentYear);
}
Я получаю сообщение об ошибке:
Оператор ‘==’ не может быть применен к операндам типа ‘System.DateTime?’ и ‘int’
Как я могу решить это сравнение?
Спасибо.
Комментарии:
1. есть ли вероятность, что g.Year — это DateTime, и, следовательно, вам понадобится g.Year.Year?
2. @Yuriy: Совершенно верно. 🙂 Хм … имея это в виду, как бы мне создать это лямбда-выражение?
3. Измените g. Из года в год. Год, и скажите тому, кто сохранил его таким образом, что вы заставите их переписать все в двоичном формате.
4. @Yuriy: Как бы вы предложили сохранить значение year в нашей базе данных? Простого числа было бы достаточно?
5. Да. В основном для соответствия
DateTime.Year
свойству. В общем, я видел, как оно хранится. Не знаю деталей, стоящих за этим.
Ответ №1:
Ваша проблема в том, что вы пытаетесь сравнить объект с примитивом. Попробуйте сравнить компонент year DateTime с вашей int
переменной year.
Ответ №2:
Попробуйте это. Не уверен, какой тип ‘Year’, поэтому я не могу сказать наверняка, что это сработает.
int currentYear = DateTime.Now.Year;
private void LoadGradeInstances()
{
GradeInstanceRepository repo = new GradeInstanceRepository();
int gradeId = 5; //For example.
cmbGradeInstance.DataSource = repo.FindAll().Where(g => g.GradeId == gradeID amp;amp; g.Year.Year == currentYear);
}
Ответ №3:
Возможно, текущий год имеет значение DateTime. В этом случае вам может потребоваться выполнить
currentYear.Year
Или g.Year имеет значение DateTime, в этом случае вам нужно сделать
g.Year >= datetimeStartOfYear amp;amp; g.Year <= datetimeEndOfYear
Комментарии:
1. Ошибка компилятора: «‘int’ не содержит определения для ‘Year'»
Ответ №4:
Попробуйте g.Year.Year
:
(g => g.GradeId == gradeID amp;amp; g.Year.Year == currentYear)
Ответ №5:
Попробуйте это:
int currentYear = DateTime.Now.Year;
private void LoadGradeInstances()
{
GradeInstanceRepository repo = new GradeInstanceRepository();
int gradeId = 5; //For example.
cmbGradeInstance.DataSource = repo.FindAll().Where(g => g.GradeId == gradeID amp;amp; g.Year.Value.Year == currentYear);
}