مرجع تخصصی برنامه نویسان

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

کاربر سایت

paya

عضویت از 1400/05/29

جست و جو یک بازه زمانی یک ساله توسط linq

  • جمعه 29 مرداد 1400
  • 22:28
تشکر میکنم

با سلام خدمت دوستان عزیز,

توسط linq و EF میخوام جست جو تاریخ داشته باشم ولی نه بین دو بازه ی مختلف زمانی ( به دلیل متفاوت بودن تاریخ ابتدایی سال شمسی و میلادی)

تاریخ ها در sql به صورت میلادی ذخیره شده اند , و میخواهم تعداد رکورد های سال جاری شمسی رو به دست بیارم , و از کد زیر استفاده کردم:

return db.tbl.Where(d => SqlFunctions.DatePart("year", d.Date).Value == SqlFunctions.DatePart("year", DateTime.Now).Value).Count()

ولی با خطای runtime زیر رو به رو میشم که متاسفانه بعد از جست و جو راه حلی پیدا نکردم :

System.NotSupportedException: 'LINQ to Entities does not recognize the method 'System.Nullable`1[System.Int32] DatePart(System.String, System.Nullable`1[System.DateTime])' method, and this method cannot be translated into a store expression.'

ابتدا فکر کردم از تنظیمات region سیستم باشه که روی persian(iran) بود ولی بعد از تغییر به US هم خطا همچنان پا برجا بود.

 

ممنون میشم راهنمایی بفرمایید

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

iran

عضویت از 1394/01/31

  • شنبه 30 مرداد 1400
  • 11:12

سلام
تبدیلها را باید خارج ازWhere انجام بدهید نه داخل Where

کاربر سایت

paya

عضویت از 1400/05/29

  • یکشنبه 31 مرداد 1400
  • 09:37

یعنی تبدیل قطعه زیر بیرون where به چه شکل میشه ؟؟

d => SqlFunctions.DatePart("year", d.Date).Value
کاربر سایت

iran

عضویت از 1394/01/31

  • دوشنبه 1 شهریور 1400
  • 17:35

سلام
 

var x=SqlFunctions.DatePart("year", d.Date).Value;
var y=SqlFunctions.DatePart("year", DateTime.Now).Value;


return db.tbl.Where(d => x ==y ).Count();
کاربر سایت

iran

عضویت از 1394/01/31

  • دوشنبه 1 شهریور 1400
  • 17:38

سلام
یک select دیگر بنویس و Date را بگیر و تبدیل را انجام بده و مابقی کارها

کاربر سایت

paya

عضویت از 1400/05/29

  • جمعه 5 شهریور 1400
  • 15:22

مشکل خیلی ساده تر از اینا بود و به روش زیر حل شد :

 

return db.tbl.Where(d => d.AccountingODOYDate.Year == date.Year && d.AccountingODOYDate.Month == date.Month).Count()

 

ممنون از همیاریتان

کاربر سایت

paya

عضویت از 1400/05/29

  • جمعه 5 شهریور 1400
  • 15:23

البته این برای بازگردانی تعداد در سال و ماه جاری است...

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)