इसलिए आप नीचे स्क्रॉल कर रहे हैं क्योंकि उत्तर काम नहीं करते हैं:
यह जादू की तरह काम करता है (लेकिन वे कहते हैं कि इसमें बड़े डेटा के लिए दक्षता के मुद्दे हैं, और आप मेरी तरह परवाह नहीं करते हैं)
1- डेटाबेस में डेटा टाइप मेरे मामले में "डेटटाइम" और "अशक्त" है।
DB में उदाहरण डेटा प्रारूप इस प्रकार है:
2018-11-06 15:33:43.640
C # में जब स्ट्रिंग में परिवर्तित किया जाता है जैसे:
2019-01-03 4:45:16 PM
तो प्रारूप है:
yyyy/MM/dd hh:mm:ss tt
2- इसलिए आपको पहले उचित प्रारूप में अपने डेटाटाइम चर तैयार करने की आवश्यकता है:
उदाहरण 1
yourDate.ToString("yyyy/MM/dd hh:mm:ss tt")
उदाहरण 2 - पिछले 30 दिनों के लिए डेटाटाइम रेंज
DateTime dateStart = DateTime.Now.AddDays(-30);
DateTime dateEnd = DateTime.Now.AddDays(1).AddTicks(-1);
3- आखिर में आप जिस दिन को खोजने की कोशिश कर रहे हैं, उसे खो देने के लिए आपके द्वारा खोई गई लाइनक क्वेरी (EF 6 की आवश्यकता है)
using System.Data.Entity;
_dbContext.Shipments.Where(s => (DbFunctions.TruncateTime(s.Created_at.Value) >= dateStart && DbFunctions.TruncateTime(s.Created_at.Value) <= dateEnd)).Count();
खाते की तुलना में समय लेने के लिए:
(DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) >= dateStart && DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) <= dateEnd)
अन्य स्टैकओवरफ़्लो प्रश्नों और उत्तरों पर उल्लिखित निम्न विधि सही ढंग से काम नहीं करेगी:
....
&&
(
s.Created_at.Value.Day >= dateStart.Day && s.Created_at.Value.Day <= dateEnd.Day &&
s.Created_at.Value.Month >= dateStart.Month && s.Created_at.Value.Month <= dateEnd.Month &&
s.Created_at.Value.Year >= dateStart.Year && s.Created_at.Value.Year <= dateEnd.Year
)).count();
यदि उदाहरण के लिए प्रारंभ का दिन इस महीने में था और अंत का दिन अगले महीने का है, तो क्वेरी गलत आएगी और कोई परिणाम नहीं मिलेगा, उदाहरण के लिए:
DatabaseCreatedAtItemThatWeWant = 2018/12/05
startDate = 2018/12/01
EndDate = 2019/01/04
क्वेरी हमेशा "महीना" को ध्यान में रखे बिना 01 से 04 के बीच के दिनों की खोज करेगी, इसलिए "s.Created_at.Value.Day <= dateEnd.Day" विफल हो जाएगा
और अगर आपके पास वास्तव में बड़ा डेटा है तो आप linq के बजाय Native SQL Query को निष्पादित करेंगे
...
... where Shipments.Created_at BETWEEN CAST(@Created_at_from as datetime) AND CAST(@Created_at_to as datetime))
....
धन्यवाद