Может быть интересно, что такое поведение может быть «решено». Используйте два интерфейса: базовый неуниверсальный интерфейс и универсальный интерфейс. Тогда компилятор знает, что все функции базового неуниверсального интерфейса не являются универсальными, и будет обрабатывать их следующим образом.
Это поведение очень раздражает, если использовать потоки и цепочку функций, и поэтому я решаю это следующим образом.
Использование через наследование интерфейса :
public interface GenericInterface<X extends Y> extends BaseInterface
{
X getValue();
}
public interface BaseInterface
{
String getStringValue();
}
Теперь вы можете выполнять следующие действия без предупреждения и без проблем:
GenericInterface object = ...;
String stringValue = object.getStringValue();
Что вы хотите сделать? Согласно вашему тексту вы хотите узнать, наступает ли данная дата сегодня или позже, но в примере кода сравнивается только месяц (что означает, что июнь этого года совпадает с июнем прошлого года). Если вы хотите сравнить дату (включая год и день), это сравнение поможет вам:
yourDate.Date >= DateTime.Now.Date
Какой провайдер здесь? LINQ-to-SQL? Объекты? Entity Framework? (судя по названию, похоже, что LINQ-to-SQL ...)
Действительно, поставщики баз данных не смогут обработать ваш метод; у вас есть несколько вариантов:
&& d.EndDate.Month> = System.DateTime.Now.Month
DateTime
Первый вариант, вероятно, проще ... если у вас возникнут проблемы с распознаванием System.DateTime.Now.Month, сначала сделайте это в переменной.
Это только проверка того, что месяц больше текущего, поэтому 4 июля 1776 года пройдет. Я полагаю, вы хотите проверить всю дату? Сделайте это:
var q = (from d in data.DateDetails
where d.Activate == 1 && d.EndDate > DateTime.Now)
orderby d.Date.Date.Month descending
select new DateItem
{
Title = d.Title,
Date = d.Date.Date + " - " + d.EndDate.Date,
Link = d.Link,
}).Take(3);
Еще пара пунктов:
if (month < System.DateTime.Now.Month)
{
return true;
}
else if (month == System.DateTime.Now.Month)
{
return true;
}
else
{
return false;
}
То же, что: return month> = System.DateTime.Now;
Я должен сказать почти то же самое, так как вы без необходимости вызываете DateTime.Now дважды, и вы можете получить отдельные значения. Вызовите DateTime.Now один раз и поместите его в переменную, чтобы гарантировать, что вы постоянно проверяете одно и то же время.