سلام وقت بخیر
مشکل من در تیکه کدم این هست که تا position رو انتخاب نکنم فیلترهای دیگه ام جواب نمیده .
سرچ رو با این ساختار و با استفاده از Repository نوشتم.
public ActionResult Search(string txtSearchOrgName, string txtSearchLastName, string txtSearchNationalcode, int?PositionID, int page = 1) { //System.Threading.Thread.Sleep(2000); var blPersonsPosition = new PersonsPositionRepository(); var personsPositionSelect = blPersonsPosition.Select(); int totalItemCount = personsPositionSelect.Count(); var model = new PageListViewModel { CurrentPage = page, PersonsPositions = personsPositionSelect.OrderBy(p => p.PersonPositionID).Skip((page - 1) * 10).Take(10) .Where( p => p.Person.NationalCode.Contains(txtSearchNationalcode) && p.Organization.OrgName.Contains(txtSearchOrgName) && p.Person.LastName.Contains(txtSearchLastName) && p.Position.PositionID == PositionID ).ToList(), TotalItemCount = totalItemCount }; return PartialView("_SearchPersonPosition", model);
این رو در کنترلر به یه پارشیال ویو پاس میدم
کد کلاسم هست:
public class PageListViewModel
{
public IEnumerable<PersonsPosition> PersonsPositions { get; set; }
public int CurrentPage { get; set; }
public int TotalItemCount { get; set; }
}
}
و کد repository که استفاده کردم:
public IQueryable<PersonsPosition> Where(System.Linq.Expressions.Expression<Func<PersonsPosition, bool>> predicate) { try { return db.PersonsPositions.Where(predicate); } catch { return null; } } public IQueryable<PersonsPosition> Select() { try { return db.PersonsPositions.AsQueryable(); } catch { return null; } }
ممنون میشم جواب بدین یا اینکه اگر روشم مشکل داره بهم بگین. نکته اینکه مدل من لیست که پیجینگ هم داره
چون در کوئری ازش استفاده کردید
باید چک کنید از null بود اصلا در کوئری استفاده نکنید
تک تک باید چک کنم ؟؟؟؟
شرط ها رو دونه دونه اعمال کنید
public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderby = null, string includeProperties = "" ) { IQueryable<TEntity> query = _dbset; if (filter != null) { query = query.Where(filter); } foreach (var includeProperty in includeProperties.Split (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProperty); } if (orderby != null) { return orderby(query).ToList(); } return query.ToList(); }
من از کد repository مربوط به Whrer استفاده کردم که
predicate داره و اگه null بود کل لیست رو نشون میده.مشکل له فیلترهایی هست که مربوط به فیلد کلید خارجی جدول اصلی هست.چون دارم تکست آنها رو هم سرچ میکنم.
public IQueryable<PersonsPosition> Where(System.Linq.Expressions.Expression<Func<PersonsPosition, bool>> predicate) { try { return db.PersonsPositions.Where(predicate); } catch { return null; } }
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)