2016-04-14 11 views
0

1つの表は様々なスポーツを保持している..私は2つのデータベーステーブルを持っている想像:述語ビルダー号

|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 

今、私は、ユーザーが自分のWebアプリケーションにテーブルを検索できるように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); 
       } 
      } 
     }