UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1);
http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if
ПРИМЕЧАНИЕ: на момент написания этого ответа EF-отношение было неясным (это было отредактировано в вопросе после того, как это было написано). Для правильного подхода с EF проверьте Mandeeps answer .
Вы можете использовать свойство DateTime.Date
, чтобы выполнить сравнение только по дате.
DateTime a = GetFirstDate();
DateTime b = GetSecondDate();
if (a.Date.Equals(b.Date))
{
// the dates are equal
}
Просто всегда сравнивайте свойство Date DateTime, а не полную дату и время.
При выполнении запроса LINQ используйте date.Date в запросе, например:
var results = from c in collection
where c.Date == myDateTime.Date
select c;
Чтобы сделать это в LINQ to Entities, вы должны использовать поддерживаемые методы :
var year = someDate.Year;
var month = ...
var q = from r in Context.Records
where Microsoft.VisualBasic.DateAndTime.Year(r.SomeDate) == year
&& // month and day
Уродливо, но это работает, и это делается на сервере БД.
Думаю, это может вам помочь.
Я сделал расширение, так как мне нужно сравнивать даты в репозиториях, заполненных данными EF, и поэтому .Date не подходил, поскольку он не реализован в Перевод LinqToEntities.
Вот код:
/// <summary>
/// Check if two dates are same
/// </summary>
/// <typeparam name="TElement">Type</typeparam>
/// <param name="valueSelector">date field</param>
/// <param name="value">date compared</param>
/// <returns>bool</returns>
public Expression<Func<TElement, bool>> IsSameDate<TElement>(Expression<Func<TElement, DateTime>> valueSelector, DateTime value)
{
ParameterExpression p = valueSelector.Parameters.Single();
var antes = Expression.GreaterThanOrEqual(valueSelector.Body, Expression.Constant(value.Date, typeof(DateTime)));
var despues = Expression.LessThan(valueSelector.Body, Expression.Constant(value.AddDays(1).Date, typeof(DateTime)));
Expression body = Expression.And(antes, despues);
return Expression.Lambda<Func<TElement, bool>>(body, p);
}
, тогда вы можете использовать его таким образом.
var today = DateTime.Now;
var todayPosts = from t in turnos.Where(IsSameDate<Turno>(t => t.MyDate, today))
select t);