[ad_1]
سيدي العزيز،
ساعدني في كيفية تحويل تنسيق التاريخ والوقت LINQ
مثال:
1، الثلاثاء 26 يناير 2012 (أو)
2، الثلاثاء، 26 يناير 2012
أعطني الحلول؟
بواسطة موهان
الحل 1
YearMonth = r.SomeDateTime.ToString("dddd, MMMM yyyy")
الحل 3
لا يعرف linq تحويل طرق “ToString ()” لذلك عندما تحصل على البيانات، استخدم عددًا لا يحصى مثل
var SelectQuery = from add in db.address.asEnumerable();
ثم يمكنك الآن استخدام طرق التحويل أو “tostring”.
الحل 4
(من اسم الفئة في الجدول الزمني حدد t.Date).ToList().Select(d => d.ToString(“yyyy-MM-dd”);
جربه يعمل …….
الحل 5
var selectQuery=from add in db.address select add.myDate.toString("{0:dddd, MMMM d, yyyy}"); selectQuery.Distinct();
جرب هذا..
يعتبر،
نيشانت
الحل 7
في بعض الأحيان يكون من المفيد التنسيق من جانب الخادم. يعد تجميع الطوابع الزمنية ذات الدقة الفرعية الثانية في مجموعات مدتها ساعة أو يوم مثالاً على ذلك.
في حالة الاستخدام الخاصة بي، نحصل على 700 ألف سجل جديد/اليوم. لذلك يمكن أن يكون جانب الخادم أسرع بكثير. في هذه الحالة، يتم تجميع 2.5 مليون سجل في 4 أيام.
يعمل تطبيق AsEnumerable، ولكنه سيستغرق حوالي 40 دقيقة (2500 ثانية). يتم استقراء هذا من إرجاع 1000/ثانية.
يستغرق تجميع جانب خادم التجميع حوالي 0.7 ثانية. يتم قياس هذا.
أنا أقوم بتشغيل جهاز تحكم عن بعد بطيء جدًا، ولكن هذا هو الهدف بالضبط. تقوم قواعد البيانات المستضافة دائمًا بإرجاع النتائج عبر السلك، لذا فإن التجميع في خادم قاعدة البيانات يسمح لمحرك قاعدة البيانات بالقيام بما تم إنشاؤه من أجله محليًا.
يجب إجراء بعض العمليات مثل toupper() أو تنسيق كل سجل محليًا إن أمكن. إن LinqToSQL/EF لتنسيق التاريخ ليس صعبًا للغاية، لكن SQL الناتج فوضوي جدًا.
إن إضافة المحددات أمر مخصص للبشر، وليس ضروريًا للتجميع. حتى أساليب PadLeft() ليست مطلوبة في معظم الحالات، ولكنها تجعل من السهل فرز التاريخ والوقت الناتج بشكل معجمي وقراءته.
في هذا المثال، قمت بتعيين الساعة والحد الأدنى والثانية على 00 لتجميعها في أيام.
للتجميع حسب الساعة، قم بإلغاء التعليق:
let Hour = Date.Hour.ToString().PadLeft(2, '0') //let Hour = "00"
هذا مجرد مثال سريع وقذر. ليس أسرع رمز على الإطلاق.
مجرد القيام بذلك من جانب الخادم يحصل عليه من 40 ثانية. إلى أقل من ثانية. لذلك انتهيت الآن.
راجع للشغل، يعمل هذا البرنامج النصي على LinqPad في بيئتي فقط، لذا قم بالتحرير ليناسب احتياجاتك، ولكن لا تطلب مني حل مشكلتك المحددة.
void Main() { var query = from cat in CATOperations let Date = cat.OperationDateTime let Year = Date.Year.ToString().PadLeft(4, '0') let Month = Date.Month.ToString().PadLeft(2, '0') let Day = Date.Day.ToString().PadLeft(2, '0') //let Hour = Date.Hour.ToString().PadLeft(2, '0') let Hour = "00" //let Minute = Date.Minute.ToString().PadLeft(2, '0') let Minute = "00" //let Second = Date.Second.ToString().PadLeft(2, '0') let Second = "00" let dateGroup = Year + '/' + Month + '/' + Day + " " + Hour + ":" + Minute + ":" + Second where Date > new DateTime(2024, 1, 9) //select new{Date, dateGroup}; group 1 by dateGroup into g orderby g.Key let count = g.Count() select new { g.Key, count }; query.Dump(); }
[ad_2]
コメント