جستجو به صورت از تاریخ تا تاریخ با استفاده از انتیتی فریم ورک در تاریخ شمسی
با سلام من در پروژه asp.net core 2 خود و با استفاده از مدل unit of work دنبال روشی برای نوشتن یک کویری برای جست و جو بین دو تاریخ فارسی هستم چگونه می توانم این کویری را بنویسم.
پاسخ هوش مصنوعی
برای جستجوی بین دو تاریخ شمسی در یک پروژه ASP.NET Core با استفاده از Entity Framework، ابتدا باید تاریخ های شمسی را به تاریخ های میلادی تبدیل کنید زیرا Entity Framework با تاریخ های میلادی کار می کند.
شما می توانید از کتابخانه PersianCalendar در .NET استفاده کنید تا تاریخ شمسی را به تاریخ میلادی تبدیل کنید. سپس می توانید از این تاریخ ها برای جستجو در دیتابیس خود استفاده کنید.
در زیر مثالی از چگونگی انجام این کار آورده شده است:
using System;
using System.Globalization;
using System.Linq;
using YourNamespace.Data; // جایگزین با فضای نام مرتبط با داده شما
public class YourRepository
{
private readonly YourDbContext _context;
public YourRepository(YourDbContext context)
{
_context = context;
}
public IQueryable GetByDateRange(DateTime startDate, DateTime endDate)
{
// تبدیل تاریخ شمسی به میلادی
var persianCalendar = new PersianCalendar();
var startGregorian = new DateTime(startDate.Year, startDate.Month, startDate.Day, persianCalendar);
var endGregorian = new DateTime(endDate.Year, endDate.Month, endDate.Day, persianCalendar);
// جستجو در دیتابیس
return _context.YourEntities
.Where(e => e.DateField >= startGregorian && e.DateField <= endGregorian);
}
}
توجه داشته باشید که YourEntity را به مدل خود و YourDbContext را به کلاس DbContext خود تغییر دهید. همچنین DateField را به فیلد تاریخ در مدل خود تغییر دهید.
برای جستجو در بین 2 بازه تاریخی چندین راه حل وجود داره.
راه اول اینه که شما تاریخ هاتون رو از نوع DateTime توی دیتابیس در نظر بگیرید. در این صورت جستجو خیلی ساده تر هست چون خود DataType از نوع DateTime قابلیت های زیادی رو برای جستجو به شما می ده
اما راه حل دوم این هست که احتمالا شما فیلد تاریخ رو از نوع varchar در نظر گرفتید و تاریخ رو هم به صورت 1398/05/09 ذخیره سازی می کنید. در این صورت می تونید از طریق دستورات Entity Framework زیر برای جستجو استفاده کنید
if (fromdate != null)
{
if (todate != null)
{
//FromDate And ToDate
var query = _context.TableUW.Get(
c => c.Date.CompareTo(fromdate) >= 0 && c.Date.CompareTo(todate) <= 0
).Count();
}
else
{
//FromDate
var query = _context.TableUW.Get(
c => c.Date.CompareTo(fromdate) >= 0).Count();
}
}
if (todate != null && fromdate == null)
{
//Todate
var query = _context.TableUW.Get(
c => c.Date.CompareTo(todate) <= 0).Count();
}
در این مورد دقت کنید که حتما تاریخ رو با فرمت صحیح ذخیره کنید.
فرمت صحیح : 1398/05/06
فرمت غلط : 1398/5/6
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2