PDA

View Full Version : سوال: نحوه استفاده از Linq Query به صورت Master Details با استفاده از Foreach



پوریا منفرد
چهارشنبه 28 خرداد 1393, 13:24 عصر
سلام اساتید محترم

بنده یه کوئری با Linq ایجاد کردم که از جدول Category -- Id,catName و از جدول فرزند به صورت Enumerable یه Select دیگه زدم تا زیر دسته ها هم لیست شن در کل به صورت زیر هست :

به صورت Lambda

public IList GetMasterDetailsFilterLang(string language)
{
var query = (_ourServiceCategories
.Where(c => (c.Language == "fa-IR"))
.Select(
c =>
new
{
CatId = c.Id,
CatName = c.Title,
OurServices = c.OurServices
.Select(
o =>
new
{
ServId = o.Id,
ServName = o.Title
}
)
}
)).ToList();

return query;
}


به صورت Linq :

from c in OurServiceCategories
where c.Language == "fa-IR"
select new
{
CatId = c.Id,
CatName = c.Title,
OurServices = from o in c.CategoryOurServices
select new
{
ServId = o.Id,
ServName = o.Title
}
}

و نتیجه کوئری:

120289

حالا می خوام این Result رو به وسیله Foreach به صورت زیر بخونم اما به جزییاتش دسترسی ندارم


foreach (var d in ds)
{
//Read Master example : d.Id,d.Title
foreach (var details in d)
{
//Read Details example : details.Id,details.Name
}

}


البته : شکی که دارم اینه که نباید به صورت Ilist دریافت بشه
ممنون میشم راهنمایی کنید.


مشکلم اینه که Ilist پر میشه اما هیچ دسترسی به آیتم هاش ندارم...

120288

mo.esmp
جمعه 30 خرداد 1393, 20:26 عصر
از اون جایی که OurServices بصورت یک anonymous type برگردونده میشه به همین خاطر باز زدن dot به Propertyهاش دسترسی نداری و برای گرفتن مقادیرش باید از Reflection استفاده کنی

@foreach (var detail in d)
{
<p>@detail.GetType().GetProperty("ServId").GetValue(detail)</p>
<p>@detail.GetType().GetProperty("SerName").GetValue(detail)</p>
}

dehqhani
چهارشنبه 11 تیر 1393, 15:38 عصر
سلام دوست عزیز

من دنبال همچین چیزی میگردم

طوری که بتونم مثل شما که دوتا گرید رو به هم وصل کردید

و با انتخاب یک آیتم از گرید زیر مجموعه آن در گرید بعدی نمایش داده می شود

اگه بتونید نمونه سورس بزارید تا ما هم بتونیم استفاده کنیم ممنون میشم

hadi0x7c7
پنج شنبه 12 تیر 1393, 22:40 عصر
شما قابلیت lazy loading ، فکر کنم خیلی اینجا به کارت میاد و اصلا برای گرفتن سرویس ها نیاز به کوئری جدا نداری کافیه یه فیلد virtual تعریف کنی توی خود category ،خوده EF مقادیر رو واست میاره

dehqhani
شنبه 14 تیر 1393, 09:39 صبح
دوست عزیز خب این lazy loading چجوری استفاده میشه

میشه لطف کنید یه sample بزارید

hadi0x7c7
شنبه 14 تیر 1393, 10:36 صبح
http://msdn.microsoft.com/en-us/data/jj574232.aspx

http://msdn.microsoft.com/en-us/library/vstudio/dd456846%28v=vs.100%29.aspx