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

Этот код работает хорошо, и я правильно преобразовал первую переменную, и я могу сравнить ее.

 PersianDateTime now = PersianDateTime.Now;
 string s = now.ToString("yyyy/MM/dd");
PersianDateTime persianDate = PersianDateTime.Parse(s);

Но этот код выдает ошибку, потому что становится условием

 var ActivitysNotToDo = _context.Activitys.Where(a => a.MasoolAghdamUserID == user.Id && PersianDateTime.Parse(a.ActvityAghdamDate) < persianDate).ToList();

В этом коде произошла ошибка. Пожалуйста, смотрите также фото

PersianDateTime.Parse(a.ActvityAghdamDate)

enter image description here

-1
stoo frisat 19 Янв 2022 в 08:52
Параметр удобства использования этого +, -,>, <, =>, = <, == и =! В нем есть операторы, но из-за того, что я конвертирую его в условие, выдает ошибку
 – 
stoo frisat
19 Янв 2022 в 09:03
PersonDateTime не является конвертируемой функцией для Ef и SQl. пожалуйста, смотрите другие тиски. преобразовать всю персидскую дату в григорианскую дату, а затем сравнить их в sql
 – 
foad abdollahi
19 Янв 2022 в 09:16
Привет, @stoofrisat, какая у тебя PersianDateTime? Не могли бы вы поделиться с нами?
 – 
Rena
19 Янв 2022 в 09:32
PrimaryDateTime — это класс для преобразования даты и времени в дату и время иранской локали. Персидский - самый иранский язык.
 – 
foad abdollahi
19 Янв 2022 в 09:36

3 ответа

Если вам подходит первый код, то:

Может быть, вы можете изменить эту строку:

var ActivitysNotToDo = _context.Activitys.Where(a => a.MasoolAghdamUserID == user.Id && PersianDateTime.Parse(a.ActvityAghdamDate) < persianDate).ToList();

За это:

var ActivitysNotToDo = _context.Activitys.Where(a => a.MasoolAghdamUserID == user.Id && PersianDateTime.Parse(Convert.ToDateTime(a.ActvityAghdamDate).ToString("yyyy/MM/dd")) < persianDate).ToList();
0
manolo386 19 Янв 2022 в 09:04

Функция DateTime.Parse(); нуждается в строковом параметре, поэтому вы должны передать строковый параметр в своем выражении.

DateTime now = DateTime.Now;
 string s = now.ToString("yyyy/MM/dd");
 DateTime.Parse(s);

 DateTime.Parse(now.ToString()); // Conversion required

Попробуйте следующий код.

PersianDateTime.Parse(a.ActvityAghdamDate.Value.ToString("yyyy/MM/dd"))
or 
PersianDateTime.Parse(Covert.ToDateTime(a.ActvityAghdamDate).ToString("yyyy/MM/dd"))
0
Pawan Lakhara 19 Янв 2022 в 09:09
Это тоже не сработало
 – 
stoo frisat
19 Янв 2022 в 09:14

Метод C# Compare() используется для лексикографического сравнения первой строки со второй строкой. Если обе строки равны, возвращается 0.

-1
Peter Csala 19 Янв 2022 в 10:10