PDA

View Full Version : سوال: استفاده مجدد از کوری Entity Framework



samadblaj
سه شنبه 08 مرداد 1392, 15:18 عصر
سلام دوستان عزیز عذر خواهی میکنم من این سوال رو قبلا در اینجــــآ (http://barnamenevis.org/showthread.php?407438-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A7%DB%8C%D9%86-%DA%A9%D8%AF-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-Linq-%D9%88-%D9%81%D8%B1%D8%B3%D8%AA%D8%A7%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D8%B4%DA%A9%D9%84-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%AA%D8%B1)مطرح کرده بودم اما به نتیجه نرسیدم پاسخ خوبی جناب qwbasic دادن اما در نحوه استفاده مشکل داشتم لطفا عزیزانی کمک کنند.

من فیلد های جدول رو به این شکل توی گرید نمایش میدم :
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 استفاده کنم؟

اینم مثال خوب آقای qwbasic که نتونستم استفاده کنم :


from view in dbs.tblBook
where view.book=="شیمی"
select myAnonymousType(view)
...
public object myAnonymousType(tblBook book)
{
return new
{
view.name,
view.family
};
}





با تشکر

Mahmoud.Afrad
سه شنبه 08 مرداد 1392, 18:59 عصر
میتونی یک کلاس با پراپرتی های مناسب تعریف کنی و همچنین یک extension method

public static class MyExtensionMethods
{
public class MyClass
{
string name, family, lif;

public string Lif
{
get { return lif; }
set { lif = value; }
}

public string Family
{
get { return family; }
set { family = value; }
}

public string Name
{
get { return name; }
set { name = value; }
}
}

public static IEnumerable<MyClass> CustomSelect(this IEnumerable<tbl> source)
{
return (from s in source
select new MyClass
{
Name = view.name,
Family = view.family,
Lif = (view.lif == 1) ? "نیست" :
(view.lif == 2) ? "هست" :
null
}
).ToList();
}
}

به اینصورت هم استفاده کن:

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

samadblaj
سه شنبه 08 مرداد 1392, 20:19 عصر
سلام ممنونم از لطف شما ولی اینجور نیاز به کد و وقت زیادی هست چون وسعت اطلاعات منم خیلی زیاد هستش...
این پست رو ببینید من میخوام از این روش در این پست (http://barnamenevis.org/showthread.php?407438-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A7%DB%8C%D9%86-%DA%A9%D8%AF-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-Linq-%D9%88-%D9%81%D8%B1%D8%B3%D8%AA%D8%A7%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D8%B4%DA%A9%D9%84-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%AA%D8%B1&p=1814154&viewfull=1#post1814154)استفاده کنم میشه خواهش کنم یه تست کنید.

Mahmoud.Afrad
سه شنبه 08 مرداد 1392, 22:39 عصر
توی اون تاپیک گفتی


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

یعنی چی 20 تا سرچ داری. میتونی دو سه تاش رو با هم بزاری برای آشنایی با شکل کوئری ها؟ و اینکه این سرچ ها به هم وابسته هستند یا نه جدا انجام میشن؟یه توضیح بده.

samadblaj
چهارشنبه 09 مرداد 1392, 11:34 صبح
توی اون تاپیک گفتی

یعنی چی 20 تا سرچ داری. میتونی دو سه تاش رو با هم بزاری برای آشنایی با شکل کوئری ها؟ و اینکه این سرچ ها به هم وابسته هستند یا نه جدا انجام میشن؟یه توضیح بده.
سلام ببخشید بد توضیح داده بودم منظورم این بود که باید بیشتر از 20 کوری بگیرم که همه نیاز به select new داره که فیلد ها رو باید در DataGridView نمایش بده...

این دقیقا پاسخ سوالم ولی متاسفانه یه خطای کوچیک داره.

from view in dbs.tblBook
where view.book=="شیمی"
select myAnonymousType(view)
...
public object myAnonymousType(tblBook book)
{
return new
{
view.name,
view.family
};
}

Mahmoud.Afrad
چهارشنبه 09 مرداد 1392, 12:23 عصر
بالاخره باید یک کلاس برای اون قسمت new تعریف کنی چون با object به پراپرتی هاش دسترسی نداری.

کد پست2 مشکلش چیه؟ یک متد توسعه ایجاد میکنی و هر جا خواستی ازش استفاده میکنی.

samadblaj
چهارشنبه 09 مرداد 1392, 12:45 عصر
سلام ببخشید میشه اینو تست کنید یه خطای کوچیک داره...

Mahmoud.Afrad
چهارشنبه 09 مرداد 1392, 14:02 عصر
موقع فراخوانی باید شئ رو ارسال کنی(یعنی i)


این هم طبق متد توسعه
http://uploadtak.com/images/x499_test.rar

samadblaj
چهارشنبه 09 مرداد 1392, 15:27 عصر
موقع فراخوانی باید شئ رو ارسال کنی(یعنی i)


این هم طبق متد توسعه
http://uploadtak.com/images/x499_test.rar

واقع بهتون تبریک میگم خوب با کلاس ها کار میکنید...
خیلی گلید مشکلم حل شد.
:تشویق: