دسته بندی ها
08:22 1398/11/05

جستجو به صورت از تاریخ تا تاریخ با استفاده از انتیتی فریم ورک در تاریخ شمسی

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

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4576
هوش مصنوعی

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

برای جستجوی بین دو تاریخ شمسی در یک پروژه 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 را به فیلد تاریخ در مدل خود تغییر دهید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamdola 15:51 1398/11/05

برای جستجو در بین 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

ویرایش شده در شنبه 5 بهمن 1398 ساعت 15:52:50
به این پاسخ امتیاز بدهید    0
امتیاز: 121 رتبه: 12
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود