Я попытался проверить месяц работы сотрудников, равный ли 3 месяца от начала работы до настоящего времени. И вот что я пытаюсь использовать:

int totalMonth = 3;
int totalYear = 0;
int mon = DateTime.Now.Month;
int yr = DateTime.Now.Year;
//block of code that I used LinQ to Entity to get staff start work date
result = result.Where(((s => mon - int.Parse(s.StartDate.Substring(3, 2).ToString()) == totalMonth && yr -int.Parse(s.StartDate.Substring(6, 4).ToString()) == totalYear))).ToList();

Формат даты в моей базе данных: 07/05/2012 Но я получил ошибку:

startIndex cannot be larger than length of string. Parameter name: startIndex

Может ли кто-нибудь сказать мне, что я здесь не так? Заранее спасибо.

c#
0
Nothing 12 Авг 2012 в 16:28
1
Ваш код работает с переменной с именем result. Но мы не можем увидеть ни тип, ни его текущее значение. Не могли бы вы подробнее рассказать об этом?
 – 
Steve
12 Авг 2012 в 16:35

1 ответ

Лучший ответ

Формат даты в моей базе данных - 05.07.2012.

Скорее всего, дата хранится в двоичном формате и не имеет формата. И то, что вы видите при перечислении записей, может отличаться от того, что происходит в C #.

Используйте отладчик, чтобы узнать, как на самом деле выглядит result.First().StartDate. Может быть "5-7-12".

1
Henk Holterman 12 Авг 2012 в 16:31
Но тип данных varchar(50) не date.
 – 
Nothing
12 Авг 2012 в 16:36
1
И вы разрешаете NULL даты? Потому что хотя бы в одной записи меньше 6 символов.
 – 
Henk Holterman
12 Авг 2012 в 16:37
1
Это ваша коренная проблема. Даты следует хранить как даты, а не строки.
 – 
Tim S.
12 Авг 2012 в 16:42