PDA

View Full Version : مشکل در جستجو



helpsos
پنج شنبه 05 تیر 1393, 17:37 عصر
سلام به همه
راستش توی جستجو یکمی گیج شدم خواستم ببینم شما می تونید کمکم کنید.
من یه کلاس دارم برای مخاطب هام به کد زیر:

public class Contact
{
public int ContactId { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string FatherName { get; set; }
public string Email { get; set; }
public virtual ICollection<Phone> Phones { get; set; }

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

public class Phone
{
public int PhoneId { get; set; }
public string PhoneNumber { get; set; }
public string PhoneNote { get; set; }
public string PhoneAddress { get; set; }
public int PhoneTypeId { get; set; }
public virtual PhoneType PhoneType { get; set; }


[ForeignKey("ContactId")]
public virtual Contact Contact { get; set; }//یه مخاطب می تونه چندین شماره داشته باشه
public int ContactId { get; set; }


حالا می خواستم که یه سرچ براش بنویسم ولی به مشکل خوردم
این کد جستجوی منه:

var listContacts = db.Contacts.Include(p => p.Phones).AsQueryable();
if (searchContact.ByName)
listContacts = listContacts.Where(c => c.LName.Contains(searchContact.Name));
if (searchContact.ByNumber)
{
listContacts = listContacts.Where(c=>c.Phones.);
}
var phonelistmodel = await
listContacts.OrderBy(p => p.ContactId)
.Skip(page * count)
.Take(count)
.Select(c => new ListPhoneNumberViewmodel()
{
ContactId = c.ContactId,
Email = c.Email,
Name = c.FName + " " + c.LName,
Phones = c.Phones
}).ToListAsync();



ولی توی این قسمت

if (searchContact.ByNumber)
{
listContacts = listContacts.Where(c=>c.Phones.);
}

من به PhoneNumber دسترسی ندارم که براش شرط رو اعمال کنم.
باید چیکار کنم؟

و مگه Include حکم Join رو نداره پس چرا داره اذیت می کنه؟

Mahmoud.Afrad
جمعه 06 تیر 1393, 01:54 صبح
Phones مجموعه ای از Phone هست پس باید یک جستجو داخلی هم بین اعضای Phones انجام بدی.
چیزی شبیه کد زیر:

listContacts = listContacts
.Where(c => c.Phones.Any(p => p.PhoneNumber == searchContact.PhoneNumber));
/*
listContacts = from c in listContacts
from p in c.Phones
where p.PhoneNumber == searchContact.PhoneNumber
select c;
*/

helpsos
جمعه 06 تیر 1393, 02:12 صبح
ممنون از پاسختون
بله همین طور است و جناب آقای وحید نصیری نیز لطف فرمودند و منت بر سرمون گذاشتن و بهم همین جواب رو دادند که واقعا ازشون تشکر می کنم

خیلی علاقه مندم که این مسایل را یاد بگیرم منبعی کاربردی دارین که آنها را آموزش داده باشد.

با تشکر