2016-04-14 4 views
0

Представьте меня есть 2 таблицы базы данных .. 1 таблица содержит различные виды спорта:Predicate Builder Проблема

|ID| |Sport| 
1  Baseball 
2  Basketball 
3  Soccer 

Вторая таблица крепят ID таблицы спорта, поэтому иностранный ключ

Имя таблицы - TestDB

|ID| |SportsID|  |Test| 
    1   1    test1 
    2   3    test2 
    3   2    test3 
    4   1    test4 
    5   2    test5 

Теперь я использую Predicate Builder, чтобы позволить пользователю искать через таблицу в моем веб-приложение:

[HttpPost] 
    public ActionResult allDailySummaries(int? sport, int? sport1) 
    { 
     List<TestDB> lstTDB = db.TDB.Include(x => x.Sports).ToList(); 

     var predicate = PredicateBuilder.True<TestDB>(); 

     if (!string.IsNullOrWhiteSpace(sport.ToString())) 
     { 
      predicate = predicate.And(x => x.SportsID == sport); 
     } 

     if (!string.IsNullOrWhiteSpace(sport1.ToString())) 
     { 
      predicate = predicate.And(x => x.SportsID == sport).; 
     } 

     if (predicate.Parameters.Count > 0) 
     { 
      lstTDB = db.TestDB.AsExpandable().Where(predicate).ToList(); 
      ViewBag.countSports = lstTDB.Count(); 
      Session["Paging"] = lstTDB; 
      ViewBag.Paging = lstTDB.ToPagedList(page ?? 1, 25); 
      return View(lstTDB.ToPagedList(page ?? 1, 25)); 
     } 
     else 
     { 
      return View(lstTDB.ToPagedList(page ?? 1,25)); 
     } 

я должен быть в состоянии фильтровать или поиск по 2 видам спорта .. поэтому, если я хотел выполнить поиск по всем записям в TestDB, которые либо бейсбол или баскетбол, то это то, что я хочу .. но когда я пытаюсь это , он ничего не возвращает, но если я только ищу 1 спорт, он работает.

Любая помощь приветствуется.

ответ

0

У меня есть решение:

List<int> lstSports = new List<int>(); 
     if(sport != null) 
     { 
      lstSports.Add(Convert.ToInt32(sport)); 
     } 
     if (sport1 != null) 
     { 
      lstSports.Add(Convert.ToInt32(sport1)); 
     } 
     if (lstSports.Count > 0) 
     { 
      foreach(int i in lstSports) 
      { 
       if(lstSports.IndexOf(i) == 0) 
       { 
        predicate = predicate.And(x => x.SportsID == i); 
       } 
       else 
       { 
        predicate = predicate.Or(x => x.SportsID == i); 
       } 
      } 
     } 
Смежные вопросы