PDA

View Full Version : سوال: تبدیل کد از LINQ به ado.net



behnam3000
دوشنبه 05 بهمن 1394, 08:50 صبح
با سلام خدمت دوستان
من یک کد جستجو دارم برای پارکینگ که با لینکیو نوشتم این پارکینگ تعداد رکورد هاش به میلون میرسه و حالا که تعداد رکورد ها زیاد شده برنامه هنگ میکنه با کمی جستجو متوجه شدم که در ado.net مشکل جستجو حل میشه میخواستم کد جستجو رو برام تبدیل کنید.
اگه روش بهتری هم دارید کدش رو برام بزارید
public void fillandsearch()
{
string start = TxtSearchDateVorodBig1.Text;
string end = TxtSearchDateVorodShort1.Text;
string startend = TxtSearchDateKhorojBig1.Text;
string endend = TxtSearchDateKhorojShort1.Text;
var query = from q in db.sabts
select q;
if (TxtSearchDateVorodBig1.Text.Length == 10 && TxtSearchDateVorodShort1.Text.Length == 10)
{
query = query.Where(s =>DC.shamsitomiladi(s.enterdate) >= DC.shamsitomiladi(start) && DC.shamsitomiladi(s.enterdate) <= DC.shamsitomiladi(end));

}
else
{
if (TxtSearchDateVorodBig1.Text.Length == 10)
{
query = query.Where(s => DC.shamsitomiladi(s.enterdate) == DC.shamsitomiladi(start));
}
}
if (TxtSearchDateKhorojBig1.Text.Length == 10 && TxtSearchDateKhorojShort1.Text.Length == 10)
{
query = query.Where(s => DC.shamsitomiladi(s.enddate) >= DC.shamsitomiladi(startend) && DC.shamsitomiladi(s.enddate) <= DC.shamsitomiladi(endend));
}
else
{
if (TxtSearchDateKhorojBig1.Text.Length == 10)
{
query = query.Where(s => DC.shamsitomiladi(s.enddate) == DC.shamsitomiladi(startend));
}
}
if (TxtSearchSerialghebz.Text != string.Empty)
{
query = query.Where(s => s.serial.Contains(TxtSearchSerialghebz.Text));
}
if (TxtSearchNoyeMotor.Text != string.Empty)
{
query = query.Where(s => s.noemotor.Contains(TxtSearchNoyeMotor.Text));
}
if (TxtSearchRangMotor.Text != string.Empty)
{
query = query.Where(s => s.rangmotor.Contains(TxtSearchRangMotor.Text));
}
if (TxtSearchShomareTane.Text != string.Empty)
{
query = query.Where(s => s.shomaretane.Contains(TxtSearchShomareTane.Text)) ;
}
if (TxtSearchShomareMotor.Text != string.Empty)
{
query = query.Where(s => s.shomaremotor.Contains(TxtSearchShomareMotor.Text ));
}
if (TxtSearchShomarePlak.Text != string.Empty)
{
query = query.Where(s => s.shomarepelak.Contains(TxtSearchShomarePlak.Text) );
}
if (TxtSearchYeghanToghef.Text != string.Empty)
{
query = query.Where(s => s.yegan.Contains(TxtSearchYeghanToghef.Text));
}
if (TxtSearchTerkhes.Text != string.Empty)
{
query = query.Where(s => s.tarkhis.Contains(TxtSearchTerkhes.Text));
}
if (TxtSearchKerayeHaml.Text != string.Empty)
{
query = query.Where(s => s.keraye.Contains(TxtSearchKerayeHaml.Text));

}
}
در این کد هر جستجو بر اساس جستجو و بصورت آنی جستجو میکنه
تمامی فیلد ها در دیتا بیس بصورت nvarchar هست

CsharpNevisi
دوشنبه 05 بهمن 1394, 10:02 صبح
این که T-SQL این لاین بنویسی یا لینکیو هیچ تفاوتی به حال تو نمیکنه .. تو باید T-SQL بنویسی ولی تو SP ..

لینکیو ران تایم SP میسازه و هر SP که لینک میسازه چون تازه تو هر اجرا به وجود میاد براش اگزکیوشن پلن درست میشه و این یه مقدار تاخیر میندازه ...

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

رو جداولت ایندکس بزار .. سعی کن SP بهینه بنویسی .. با Execution Plan بررسی کن دستورتو تا ببینی گیرش کجاس .. با SQL-Profiler هم یه چکی بکن .. لازم بود View بساز لازم شد Trigger بساز .. !!!

اگه باز بازده خوبی نداشتی یه دیتاور هوس درست کن که نان ترنس اکشنال باشه .. :D

تا مشکلت برطرف شه .. !! :))))

behnam3000
دوشنبه 05 بهمن 1394, 12:58 عصر
این که T-SQL این لاین بنویسی یا لینکیو هیچ تفاوتی به حال تو نمیکنه .. تو باید T-SQL بنویسی ولی تو SP ..

لینکیو ران تایم SP میسازه و هر SP که لینک میسازه چون تازه تو هر اجرا به وجود میاد براش اگزکیوشن پلن درست میشه و این یه مقدار تاخیر میندازه ...

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

رو جداولت ایندکس بزار .. سعی کن SP بهینه بنویسی .. با Execution Plan بررسی کن دستورتو تا ببینی گیرش کجاس .. با SQL-Profiler هم یه چکی بکن .. لازم بود View بساز لازم شد Trigger بساز .. !!!

اگه باز بازده خوبی نداشتی یه دیتاور هوس درست کن که نان ترنس اکشنال باشه .. :D

تا مشکلت برطرف شه .. !! :))))

اینایی که گفتی چی هست دوبله بگو لطفا :گیج::گیج::گیج:

CsharpNevisi
دوشنبه 05 بهمن 1394, 13:11 عصر
ایندکس گذاری رو جداول رو برو دنبالش .. اول .. :|

مثلا تو میخوایی ایدی 950 رو توی 1000 رگورد پیدا کنی .. !!!

منطقیه دونه دونه 1000 تا رو بگردی تا اینو پیدا کنی ؟؟؟؟؟

نه .. منطقی نیست .. میایی ایندکس میزازی رو ای.دی .. خود اس.کیو.ال میاد اینا رو ترتیب تو هارد ذخیره میکنه .. بعد موقع سرچ به جای 1000 تا حرکت با 5 , 6 تا حرکت پیداش میکنه و برمیگردونه .. :D

این مثال برای ای.دی بود .. ولی تو باید رو هر چیزی که درگیر ورکلاست ایندکس بزاری ..

به همین راحتی

davidrobert
دوشنبه 05 بهمن 1394, 13:45 عصر
داداش این هم کد سورس با ADO
http://s7.picofile.com/file/82352309...r_Date.7z.html (http://s7.picofile.com/file/8235230900/dateSearch_ADO_For_Date.7z.html)
میاد تاریخ ورودی با خروجی رو بررسی میکنه مقدار رو نمایش میده

behnam3000
سه شنبه 06 بهمن 1394, 00:33 صبح
داداش این هم کد سورس با ADO
http://s7.picofile.com/file/82352309...r_Date.7z.html (http://s7.picofile.com/file/8235230900/dateSearch_ADO_For_Date.7z.html)
میاد تاریخ ورودی با خروجی رو بررسی میکنه مقدار رو نمایش میده

سلام مرسی دیوید جان زحمت دادم بهت کدت عالی بود فقط من به ado کد بالا نیاز دارم