PDA

View Full Version : مشکل در entity framework



hamix666
چهارشنبه 13 مرداد 1395, 00:47 صبح
با سلام
دوستا من یک فیلد دارم از نوع nvarchar که داخلش تاریخ نوشته می شه مثال : 1395/02/02 و وقتی که در entity می خوام بین 2 تاریخ جستجو کنم نمی شه و ارور می ده

An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll


Additional information: LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.

ژیار رحیمی
چهارشنبه 13 مرداد 1395, 03:49 صبح
دوست گرامی اون بخش از کدتون که خطا دارد رو بزارید تا راهنمایی لازم صورت گیرد

omid nasri
چهارشنبه 13 مرداد 1395, 20:33 عصر
دوست گرامی برای جستجو با تاریخ فارسی از نمونه کد زیر استفاده کنید:
// تاریخ اخذ پروانه
if (model.LicenseDate != null)
agencys = agencys.Where(x => string.Compare(x.LicenceDate, model.LicenseDate, StringComparison.Ordinal) >= 0);
// تاریخ انقضا پروانه
if (model.LicenseExpireDate != null)
agencys = agencys.Where(x => string.Compare(x.LicenceExpire, model.LicenseExpireDate, StringComparison.Ordinal) <= 0);

hamix666
چهارشنبه 13 مرداد 1395, 20:55 عصر
دوست گرامی اون بخش از کدتون که خطا دارد رو بزارید تا راهنمایی لازم صورت گیرد



grozv.DataSource = (from u in db.Tbl_Customer where Convert.ToInt32(u.Customer_Start) >= Convert.ToInt32(textBox1.Text) && Convert.ToInt32(u.Customer_Start) <= Convert.ToInt32(txtta.Text) select u).ToList();

ژیار رحیمی
پنج شنبه 14 مرداد 1395, 03:50 صبح
دوست گرامی شما نمی تونید داخل کویری از متد Convert.ToInt32 استفاده کنی
اگر فیلد Customer_Start فیلد تاریخ شما که بصورت String هست.بهتره به صورت زیر اصلاح کنی.


var startDate=textBox1.Text;
var endDate=txtta.Text;
grozv.DataSource = db.Tbl_Customer.Where(c=>c.Customer_Start.CompareTo(startDate)>=0 && c.Customer_Start.CompareTo(endDate)<=0).ToList();

hamix666
پنج شنبه 14 مرداد 1395, 11:21 صبح
دوست گرامی شما نمی تونید داخل کویری از متد Convert.ToInt32 استفاده کنی
اگر فیلد Customer_Start فیلد تاریخ شما که بصورت String هست.بهتره به صورت زیر اصلاح کنی.


var startDate=textBox1.Text;
var endDate=txtta.Text;
grozv.DataSource = db.Tbl_Customer.Where(c=>c.Customer_Start.Compare(startDate)>=0 && c.Customer_Start.Compare(endDate)<=0).ToList();



انجام دادم ولی ارور زیر رو داره میده

141843

ژیار رحیمی
پنج شنبه 14 مرداد 1395, 12:30 عصر
اشتباه املایی در نام متد هست .Compare را به CompareTo اصلاح نمایید

hamix666
جمعه 15 مرداد 1395, 13:05 عصر
اشتباه املایی در نام متد هست .Compare را به CompareTo اصلاح نمایید

مرسی درست شد
حالا اگه بخوام سورت بشن بر اساس تاریخ باید په دستوری توی کوئری بکار ببرم؟

mrprestige
جمعه 15 مرداد 1395, 13:34 عصر
سلام دوست من وقتت بخیر .

grozv.DataSource =db.Tbl_Customer.OrderByDescending( db.Tbl_Customer.Where(c=>c.Customer_Start.Compare( startDate)>=0 && c.Customer_Start.Compare(endDate)<=0)).ToList();

پیروز موفق باشید

omid nasri
جمعه 15 مرداد 1395, 19:48 عصر
بهینه است اول شرط برسی شده سپس دستور OrderByDescending را بکار ببرید.

hamix666
جمعه 15 مرداد 1395, 21:02 عصر
سلام دوست من وقتت بخیر .

grozv.DataSource =db.Tbl_Customer.OrderByDescending( db.Tbl_Customer.Where(c=>c.Customer_Start.Compare( startDate)>=0 && c.Customer_Start.Compare(endDate)<=0)).ToList();

پیروز موفق باشید


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

private void Grid()
{
grbedhi.DataSource = (from u in db.Tbl_Customer

where u.Customer_bedehi>0 select new
{
u.Customer_ID,
u.Customer_Name,
u.Customer_Famili,
u.Customer_bedehi,
u.Customer_Start,
u.Customer_End,



}).ToList();

omid nasri
جمعه 15 مرداد 1395, 21:21 عصر
بعد از بسته شدن () به صورت زیر عمل کن:
private void Grid()
{
grbedhi.DataSource = (from u in db.Tbl_Customer

where u.Customer_bedehi>0 select new
{
u.Customer_ID,
u.Customer_Name,
u.Customer_Famili,
u.Customer_bedehi,
u.Customer_Start,
u.Customer_End,
}).OrderByDescending(x=>x.Customer_Start).ToList();
}

mrprestige
جمعه 15 مرداد 1395, 23:00 عصر
بهینه است اول شرط برسی شده سپس دستور OrderByDescending را بکار ببرید.

سلام دوست من وقتت بخیر ، دوست خوبم من ، دستور OrderBy به این صورت اجرا میشه که شرطی که در داخل اون تعریف کردیم بررسی بعد در همون لحظه عملیات OrderBy انجام میشه اینطور بهتره یا اینکه به قول شما اول بیایم کل شرط رو بررسی کنیم بعد بیایم عملیات OrderBy رو انجام بدیدم ؟؟ مثلا فکر کنید اگه حجم پایگاهمون زیاد بود اون موقع با شرایطی الان فرمودید فاجعه ای به نام هنگ کردن رخ میداد . الکی چرا حجم کدنویسی رو زیاد و در کنارش Performance برنامه رو پایین بیاریم ؟ بنظر خودت باز کدوم منطقی تره ؟

omid nasri
شنبه 16 مرداد 1395, 02:33 صبح
سلام دوست من وقتت بخیر ، دوست خوبم من ، دستور OrderBy به این صورت اجرا میشه که شرطی که در داخل اون تعریف کردیم بررسی بعد در همون لحظه عملیات OrderBy انجام میشه اینطور بهتره یا اینکه به قول شما اول بیایم کل شرط رو بررسی کنیم بعد بیایم عملیات OrderBy رو انجام بدیدم ؟؟ مثلا فکر کنید اگه حجم پایگاهمون زیاد بود اون موقع با شرایطی الان فرمودید فاجعه ای به نام هنگ کردن رخ میداد . الکی چرا حجم کدنویسی رو زیاد و در کنارش Performance برنامه رو پایین بیاریم ؟ بنظر خودت باز کدوم منطقی تره ؟

متن بالا رو مجدد بخونید.

hamix666
دوشنبه 18 مرداد 1395, 23:25 عصر
بعد از بسته شدن () به صورت زیر عمل کن:
private void Grid()
{
grbedhi.DataSource = (from u in db.Tbl_Customer

where u.Customer_bedehi>0 select new
{
u.Customer_ID,
u.Customer_Name,
u.Customer_Famili,
u.Customer_bedehi,
u.Customer_Start,
u.Customer_End,
}).OrderByDescending(x=>x.Customer_Start).ToList();
}


مرسی درست شد یه چیز دیگه هم می خوام بهش اضافه کنم اونم اینه که یه فیلد به جدول اضافه بکنم که دیتا رو از جایی نگیره بلکه بیاد و تاریخ انقضا رو از تاریخ روز کم کنه و تعداد روزهای باقی مونده رو داخل هر ردیف در فیلدش بنویسه

hamix666
شنبه 23 مرداد 1395, 02:11 صبح
مرسی درست شد یه چیز دیگه هم می خوام بهش اضافه کنم اونم اینه که یه فیلد به جدول اضافه بکنم که دیتا رو از جایی نگیره بلکه بیاد و تاریخ انقضا رو از تاریخ روز کم کنه و تعداد روزهای باقی مونده رو داخل هر ردیف در فیلدش بنویسه
کسی نیست کمک کنه ؟