دسته بندی ها
08:22 1401/08/21

نمایش تبلیغ در سایت در یک بازه تاریخی

مشخصات سوال کننده :
کاربر : farhadrezazadeh     امتیاز کاربر : 3     رتبه کاربر : 136
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    ‎−1
تعداد بازدید این سوال : 2031
هوش مصنوعی

پاسخ هوش مصنوعی

برای حل مشکلی که با استفاده از متد CompareTo در خارج از SQL دارید، به جای استفاده از مقایسه در سطح SQL، می توانید تاریخ ها را به صورت DateTime مقایسه کنید. به این ترتیب، نیاز دارید تا تاریخ ها را قبل از اجرای کویری تبدیل کنید.

ابتدا، تاریخ های شمسی را به تاریخ میلادی تبدیل کنید و سپس در کویری از مقادیر مقایسه شده استفاده کنید.

string fromDateShamsi = "1401/20/08"; // تاریخ شروع به فرمت شمسی
string toDateShamsi = "1401/25/08"; // تاریخ پایان به فرمت شمسی

DateTime fromDate = ConvertDateTime.ConvertShamsiToMiladi(fromDateShamsi);
DateTime toDate = ConvertDateTime.ConvertShamsiToMiladi(toDateShamsi);

model.Adv = _iuw.advertisUW.Get(a => a.FromDate >= fromDate && a.ToDate <= toDate && a.flag == 0).ToList();

در اینجا، ما ابتدا تاریخ ها را به میلادی تبدیل کرده و سپس از آن ها در شرایط کویری استفاده کرده ایم. این کار سبب می شود که تمامی مقایسه ها در سطح SQL انجام شوند و از خطای موجود جلوگیری شود.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mohammad-i 20:41 1401/09/10

مقایسه تاریخ رو باید قبل از 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 رو با هم مقایسه کنی.

به این پاسخ امتیاز بدهید    1
امتیاز: 260 رتبه: 7
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود