Возникли проблемы с построением этого небольшого сравнения в C#

#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);
}