با سلام ، توی پروژه وب سایت خبری قرار هست تلبیغات را از فلان تاریخ تا فلان تاریخ نمایش بدم ، فرمت تاریخ ها از نوع DateTime هست ولی موقع لود سایت با خطایی که تصویرش رو فرستادم مواجه میشم .. ممنون میشم راهنمایی بفرمایید .. البته تاریخ رو از طریق یک کلاس بنام ConvertDateTime تبدیل میکنم به فرمت شمسی
InvalidOperationException: The LINQ expression 'DbSet<Advertise>() .Where(a => a.FromDate.CompareTo("1401/20/08") <= 0 && a.ToDate.CompareTo("1401/20/08") >= 0 && (int)a.flag == 0)' could not be translated. Additional information: Translation of method 'System.DateTime.CompareTo' failed. If this method can be mapped to your custom function, see https://go.microsoft.com/fwlink/?linkid=2132413 for more information. Translation of method 'System.DateTime.CompareTo' failed. If this method can be mapped to your custom function, see https://go.microsoft.com/fwlink/?linkid=2132413 for more information. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
جدول تبلیغات
کلاس تبدیل به فرمت تاریخ
public static class ConvertDateTime
{
public static DateTime ConvertShamsiToMiladi(string date)
{
PersianDateTime persianDateTime = PersianDateTime.Parse(date);
return persianDateTime.ToDateTime();
}
public static string ConvertMiladiToShamsi(this DateTime? date, string format)
{
PersianDateTime persianDateTime = new PersianDateTime(date);
return persianDateTime.ToString(format);
}
}
و کویری مربوط به نمایش تبلیغات از تاریخ تا تاریخ که مشکل من از همیجاست و نمیدونم چطور باید این دستور رو کنترل کنم
model.Adv = _iuw.advertisUW.Get(a => (a.FromDate.CompareTo("1401/20/08") <= 0
&& a.ToDate.CompareTo("1401/20/08") >= 0) && a.flag == 0).ToList();
این دستور در قسمت Home اصلی سایت نوشتم
باز هم ممنون از شما اساتید محترم
مقایسه تاریخ رو باید قبل از Convert و با همون تاریخ میلادی(با فرمت dateTime) انجام بدید.
برای مثال :
context.Table.where( x= > x.startDate < todateDate && todayDate < x.endDate)
البته راه های مختلفی برای مقایسه تاریخ هست فقط نکته اش اینه که بهترین حالت مقایسه با فرمت Datetime و قبل از convert به شمسی هست.
اگر خارج از دستورات linq بخوای مقایسه کنید هم به این شکل میشه :
DateTime.Compare(startdate, enddate);
که نتیجه -1، 0 یا 1 میشه.
اگر هم هیچ راهی ندارید و باید تاریخ شمسی که string هست رو مقایسه کنید، باید ابتدا "/" ها رو بردارید، string رو به int تبدیل کنی و در آخر دوتا Int رو با هم مقایسه کنی.
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
54
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
93
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1347
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
116
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
394
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
561
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
54
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
93
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1347
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|