PDA

View Full Version : سوال: بهینه سازی این کد جستجو Linq و فرستادن اطلاعات به شکل بهینه تر



samadblaj
دوشنبه 17 تیر 1392, 10:59 صبح
سلام دوستان عزیز من فیلد های جدول رو به این شکل توی گرید نمایش میدم :

private void viewData()
{
Database dbs = new Database ();
DGVbook.DataSource = from view in dbs.tblBook
where view.ID_book==1
select new
{
view.name,
view.family,
lif= (view.lif == 1) ? "نیست" :
(view.lif== 2) ? "هست" :
null,
};
}
لیست آیتم هام خیلی هستند .

حالا من میام روی جدول جستجو کنم و در همین گرید نمایش بدم...
دوباره باید این همه کد رو برای یه سرچ ساده بنویسم (حدود 20 سرچ هم دارم)

private void viewSearch1()
{
Database dbs = new Database ();
DGVbook.DataSource = from view in dbs.tblBook
where view.book=="شیمی"
select new
{
view.name,
view.family,
lif= (view.lif == 1) ? "نیست" :
(view.lif== 2) ? "هست" :
null,
};
}


حالا من چط.ر میتونم وقتی این قسمت رو نوشتم دیگه نیاز به تایپ مابقی و آیتم ها نیست

private void viewSearch1()
{
Database dbs = new Database ();
DGVbook.DataSource = from view in dbs.tblBook
where view.book=="شیمی"

یعنی بشه از select new تابع اول viewData استفاده کنم؟

با تشکر

samadblaj
دوشنبه 17 تیر 1392, 14:09 عصر
کسی از اساتید نمیتونه کمکم کنه؟

mousa1992
دوشنبه 17 تیر 1392, 15:19 عصر
سلام دوست عزیز
این تاپیک (http://barnamenevis.org/showthread.php?402201-%D9%81%D8%B1%D9%82-Enumerable-%D9%88-Iqueryable-%D9%88TolIst%28%29&highlight=%D8%AA%D9%81%D8%A7%D9%88%D8%AA+iqueryabl e+ienumerable) مشکلتو حل میکنه

موفق باشی

gwbasic
دوشنبه 17 تیر 1392, 16:48 عصر
from view in dbs.tblBook
where view.book=="شیمی"
select myAnonymousType(view)
...
public object myAnonymousType(tblBook book)
{
return new
{
view.name,
view.family
};
}

samadblaj
جمعه 21 تیر 1392, 11:41 صبح
سلام ابتدا عذر خواهی میکنم با تاخیر جواب میدم...
ممنونم آقای mousa1992 از شما تشکر میکنم و از مثال بسیار روشن آقای gwbasic از توجهتون خیلی خیلی تشکر میکنم
موفق باشید./

samadblaj
پنج شنبه 03 مرداد 1392, 21:52 عصر
سلام ببخشید جناب qbasic در طول استفاده از این روش به خطا برخورد میکردم لطفا راهنماییم کنید...

samadblaj
جمعه 04 مرداد 1392, 11:21 صبح
کسی نیست راهنمایی کنه؟

gwbasic
چهارشنبه 09 مرداد 1392, 13:02 عصر
به جای اینکه query رو Bind کنید query.ToList رو به گرید بایند کنید

samadblaj
چهارشنبه 09 مرداد 1392, 13:13 عصر
ببخشید میشه خواهش کنم مجای کد باید قرار بدم بخدا خیلی لنگ این کدم :

private void button1_Click(object sender, EventArgs e)
{
dbTestEntities db = new dbTestEntities();

var q = from i in db.Table1
where i.sex == true
select myAnonymousType(i);

dataGridView1.DataSource = q.ToList();
}

public object myAnonymousType(Table1 view)
{
return new
{
view.name,
view.family,
view.age
};
}

gwbasic
چهارشنبه 09 مرداد 1392, 14:47 عصر
ببخشید من خطا رو کامل نخوندم! خطا می گه که EF نمی تونه اون متدی رو نوشتین به دستور sql تبدیل کنه که منطقی هست بنابراین شما اول کوئری رو بدون Projection اجرا کنید و تغییرات لازم رو در نتیجه اون اعمال کنید


private void button1_Click(object sender, EventArgs e)
{
dbTestEntities db = new dbTestEntities();

var q = (from i in db.Table1
where i.sex == true
select i).ToList();

dataGridView1.DataSource = q.Select(i => myAnonymousType(i)).ToList();
}

public object myAnonymousType(Table1 view)
{
return new
{
view.name,
view.family,
view.age
};
}


کدو با notepad نوشتم امیدوارم درست باشه

samadblaj
چهارشنبه 09 مرداد 1392, 15:21 عصر
ممنونم بخدا عالی بود خیلی خیلی متشکرم...
نمیدونید چقدر ور رفتم چقدر جستجو کردم.
موفق باشید دوست من امیدوارم بتونم جبران کنم :تشویق: :تشویق: