تبدیل کد از LINQ به ado.net
با سلام خدمت دوستان
من یک کد جستجو دارم برای پارکینگ که با لینکیو نوشتم این پارکینگ تعداد رکورد هاش به میلون میرسه و حالا که تعداد رکورد ها زیاد شده برنامه هنگ میکنه با کمی جستجو متوجه شدم که در 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 هست
نقل قول: تبدیل کد از linQ به ado.net
این که T-SQL این لاین بنویسی یا لینکیو هیچ تفاوتی به حال تو نمیکنه .. تو باید T-SQL بنویسی ولی تو SP ..
لینکیو ران تایم SP میسازه و هر SP که لینک میسازه چون تازه تو هر اجرا به وجود میاد براش اگزکیوشن پلن درست میشه و این یه مقدار تاخیر میندازه ...
ولی وقتی SP بسازی و هر بار خواستی کالش کنی بار اول تاخیر داره ولی بار دوم به بعد چون پلنش درست شده اون تاخیرو نداره .. در نتیجه بهبود سرعت رو داری ولی باز سرعتت افزایش چشم گیر نداره :لبخند:
رو جداولت ایندکس بزار .. سعی کن SP بهینه بنویسی .. با Execution Plan بررسی کن دستورتو تا ببینی گیرش کجاس .. با SQL-Profiler هم یه چکی بکن .. لازم بود View بساز لازم شد Trigger بساز .. !!!
اگه باز بازده خوبی نداشتی یه دیتاور هوس درست کن که نان ترنس اکشنال باشه .. :D
تا مشکلت برطرف شه .. !! :))))
نقل قول: تبدیل کد از linQ به ado.net
نقل قول:
نوشته شده توسط
CsharpNevisi
این که T-SQL این لاین بنویسی یا لینکیو هیچ تفاوتی به حال تو نمیکنه .. تو باید T-SQL بنویسی ولی تو SP ..
لینکیو ران تایم SP میسازه و هر SP که لینک میسازه چون تازه تو هر اجرا به وجود میاد براش اگزکیوشن پلن درست میشه و این یه مقدار تاخیر میندازه ...
ولی وقتی SP بسازی و هر بار خواستی کالش کنی بار اول تاخیر داره ولی بار دوم به بعد چون پلنش درست شده اون تاخیرو نداره .. در نتیجه بهبود سرعت رو داری ولی باز سرعتت افزایش چشم گیر نداره :لبخند:
رو جداولت ایندکس بزار .. سعی کن SP بهینه بنویسی .. با Execution Plan بررسی کن دستورتو تا ببینی گیرش کجاس .. با SQL-Profiler هم یه چکی بکن .. لازم بود View بساز لازم شد Trigger بساز .. !!!
اگه باز بازده خوبی نداشتی یه دیتاور هوس درست کن که نان ترنس اکشنال باشه .. :D
تا مشکلت برطرف شه .. !! :))))
اینایی که گفتی چی هست دوبله بگو لطفا :گیج::گیج::گیج:
نقل قول: تبدیل کد از linQ به ado.net
ایندکس گذاری رو جداول رو برو دنبالش .. اول .. :|
مثلا تو میخوایی ایدی 950 رو توی 1000 رگورد پیدا کنی .. !!!
منطقیه دونه دونه 1000 تا رو بگردی تا اینو پیدا کنی ؟؟؟؟؟
نه .. منطقی نیست .. میایی ایندکس میزازی رو ای.دی .. خود اس.کیو.ال میاد اینا رو ترتیب تو هارد ذخیره میکنه .. بعد موقع سرچ به جای 1000 تا حرکت با 5 , 6 تا حرکت پیداش میکنه و برمیگردونه .. :D
این مثال برای ای.دی بود .. ولی تو باید رو هر چیزی که درگیر ورکلاست ایندکس بزاری ..
به همین راحتی
نقل قول: تبدیل کد از linQ به ado.net
داداش این هم کد سورس با ADO
http://s7.picofile.com/file/82352309...r_Date.7z.html
میاد تاریخ ورودی با خروجی رو بررسی میکنه مقدار رو نمایش میده
نقل قول: تبدیل کد از linQ به ado.net
نقل قول:
نوشته شده توسط
davidrobert
سلام مرسی دیوید جان زحمت دادم بهت کدت عالی بود فقط من به ado کد بالا نیاز دارم