PDA

View Full Version : سرچ درون کالکشن با linq



resident
سه شنبه 13 اسفند 1392, 15:46 عصر
کالکشن و کلاسهای زیر رو در نظر بگیرید

ICollection<Ientity> collection;
Class Person: Ientity {
Int PersonID {get;set;}
List<Contact> Contacts{get;set;}
}
Class Contact{
Int ContactID {get;set;}
String Title{get;set;}
}

حالا من میخوام با Linq سرچ کنم، اگه contatctID=5 بود و personID=10 ، person برگردونه
کد نصفه نیمه ی زیر رو نوشتم ولی خروجی از نوع Person نیست.کسی می تونه راهنماییم کنه؟

var en = from person in collection
from contact in ((Person)person).Contacts
where contact.Id==5
select person;

مهرداد صفا
سه شنبه 13 اسفند 1392, 20:35 عصر
سلام.
با توجه به اینکه در ساختار شما هر Person ممکن است چند Contact داشته باشد، باید از متود Contains استفاده کنید تا Contactی را انتخاب کنید که ContactId مورد نظر در بین Contact هایش موجود باشد. به این صورت:



Person result=(from person in collection where person.PersonID==10 & person.Contacts.Contains(c=>c.ContactID==5) select person).SingleOrDefault();

Mahmoud.Afrad
پنج شنبه 15 اسفند 1392, 13:08 عصر
var result = from p in collection
from c in p.Contacts
where p.PersonID == 10 && c.ContactID == 5
select p;

resident
جمعه 16 اسفند 1392, 19:56 عصر
مرسی از هر دوی شما عزیزان...
در کدهایی که شما بزرگواران نوشتید Contacts به عنوان بخشی از Person شناسایی نمیشه
در کدی که نوشتم collection از نوع ICollection<Ientity> است. Person هم از ientity ارث بری کرده...
به همین دلیل در کد باید هر item موجود در کالکشن تبدیل بشه به person تا contacts قابل شناسایی بشه. ولی نمیدونم چطور...

Mahmoud.Afrad
جمعه 23 اسفند 1392, 11:05 صبح
کد خودت رو بزار. همراه با کد مقدار دهی به collection