LINQ dynamic query code
//Input : str=> string to search some text (First Name,Last Name,Date of Birth(dd/mm/yyyy) or post code) in any order;
//output : result set
str = str.ToLower().Replace(" ", " ").Trim();
IList<vw_patient> patients = App.Patients;
string[] parts = str.Split(" ".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
Func<vw_patient, bool> predicate = null;
foreach (string part in parts)
{
long retCode = 0;
predicate = delegate(vw_patient p)
{
return p.Pati_FirstName.ToLower().StartsWith(part) ||
p.Pati_SurName.ToLower().StartsWith(part) ||
(long.TryParse(part.Replace("/", ""), out retCode) ? ((p.Pati_DOB.HasValue ? p.Pati_DOB.Value.ToShortDateString().Replace("/", "") : "").Contains(part.Replace("/", ""))) : false) ||
p.Pati_PostCode.Replace(" ","").ToLower().StartsWith(part);
};
patients = patients.Where<vw_patient>(predicate).ToList();
}
this.dgPatients.ItemsSource = new PagedCollectionView(patients);
//PagedCollectionView is used for paging with data grid

Leave a comment