مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

منال مجموعه

عضویت از 1393/10/21

سرچ در با چند فیلترmvc

  • دوشنبه 1 مرداد 1397
  • 17:09
تشکر میکنم

سلام وقت بخیر

مشکل من در تیکه کدم این هست که تا 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;
            }
        }

ممنون میشم جواب بدین یا اینکه اگر روشم مشکل داره بهم بگین. نکته اینکه مدل من لیست که پیجینگ هم داره

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 1 مرداد 1397
  • 17:31

چون در کوئری ازش استفاده کردید 

باید چک کنید از null بود اصلا در کوئری استفاده نکنید 

کاربر سایت

منال مجموعه

عضویت از 1393/10/21

  • دوشنبه 1 مرداد 1397
  • 17:43

تک تک باید چک کنم ؟؟؟؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 1 مرداد 1397
  • 17:47

شرط ها رو دونه دونه اعمال کنید 

  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();

        }

کاربر سایت

منال مجموعه

عضویت از 1393/10/21

  • دوشنبه 1 مرداد 1397
  • 17:49

من از کد 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;
          }
      }

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)