Определите равенство значений Даты и времени с мелкой точностью в LINQ

Возможно, необходимо посмотреть на наличие и проверка клиентской и серверной стороны. Если бы что-нибудь проскальзывает мимо клиентской проверки, можно тогда не стесняться выдавать исключение, если бизнес-объект был бы сделан недопустимым.

Один подход, который я использовал, должен был применить пользовательские атрибуты к свойствам бизнес-объекта, которые описали правила проверки. например:

[MinValue(10), MaxValue(20)]
public int Value { get; set; }

атрибуты могут тогда обрабатываться и использоваться, чтобы автоматически создать и методы проверки клиентской и серверной стороны, избежать проблемы дублирования бизнес-логики.

7
задан PreethaA 14 August 2009 в 13:24
поделиться

3 ответа

Проверка того, не будет ли Math.Abs ​​(diff.TotalMinutes) == 0 этого сделать, нет - это проверка, являются ли они точно то же самое.

Вы пытаетесь проверить, совпадают ли они в одной минуте или разницы между ними меньше минуты? Для первого используйте:

where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)

, объявив:

public static DateTime RoundToMinute(DateTime time)
{
    return new DateTime(time.Year, time.Month, time.Day,
                        time.Hour, time.Minute, 0, time.Kind);
}

Для второго, используйте:

where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1

Вы должны подумать о том, какой результат вы хотите получить в случае, если один локальный, а другой, кстати, в UTC ...

Обратите внимание, что здесь нет ничего специфичного для LINQ - если вы используете LINQ to Objects. Если вы используете LINQ to SQL, то, очевидно, вы не можете использовать локальные методы, и нам придется поискать еще раз ...

РЕДАКТИРОВАТЬ: Мне все еще неясен ваш вопрос. Если вам нужно, чтобы они точно совпадали с датой / временем, это '

12
ответ дан 6 December 2019 в 21:17
поделиться

Как насчет

where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))

?

0
ответ дан 6 December 2019 в 21:17
поделиться

Спасибо, Аллен, сделаю это (все еще пытаясь понять, как именно работает этот процесс!). Вот фрагмент кода, указывающий на ответ, который я придумал изначально:

(Math.Abs (datetime1.Subtract (datetime2) .TotalMinutes) == 0)

Справочная информация: в предложении WHERE моего запроса linq (следовательно, однострочном) мне нужно проверить, совпадают ли datetime1 и datetime2. Рассматриваемые значения datetime - это даты штампов для других значений, используемых в запросе.

0
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: