2012-04-14 8 views
1

私はここに来て、ここに来ています。私は私のShowAllReviewコントローラに次のコードを持っている:レビューテーブルに含まれて持つビューは、次のエラーを投げるでしょうデータベースの異なるレコードを使ったカントの検索

var FullDatabaseItem = from b in db.tblReviews.Include(x => x.tblGame)select b; 

public ActionResult Index(string Ordering, string WordFilter, string DisplaySearchResults, int? CounterForPage) 
     { 
      using (var db = new gamezoneDBEntities()) 
      { 

       ViewBag.Message = TempData["message"]; 
       ViewBag.CurrentSort = Ordering; 
       ViewBag.NameSortParm = String.IsNullOrEmpty(Ordering) ? "GameName" : ""; 
       ViewBag.DateSortParm = Ordering == "ReleaseYearOfGame" ? "DiscriptionOfGame" : "Date"; 


       { 
        TempData["DisplaySearchResult"] = DisplaySearchResults; 

        { 
         ViewBag.search = DisplaySearchResults; 
        } 
        if (Request.HttpMethod == "GET") 
        { 
         DisplaySearchResults = WordFilter; 
        } 
        else if (DisplaySearchResults == "") 
        { 
         ViewData["MyMessage"] = "Nothing Has Been Entered."; 

        } 

        else 
        { 
         CounterForPage = 1; 
        } 

        ViewBag.CurrentFilter = DisplaySearchResults; 


        var FullDatabaseItem = from b in db.tblReviews.Include(x => x.tblGame) 
              select b; 



        if (!String.IsNullOrEmpty(DisplaySearchResults)) 
        { 

         FullDatabaseItem = FullDatabaseItem.Include (x => x.tblGame) 
         .Where (b => b.Score.ToUpper().Contains(DisplaySearchResults.ToUpper())); 

        } 

        switch (Ordering) 
        { 
         case "HeadlineName": 
          FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.Score); 
          break; 
         case "DatePosted": 
          FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.Recomendation); 
          break; 
         case "DiscriptionDate": 
          FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.Recomendation); 
          break; 
         default: 
          FullDatabaseItem = FullDatabaseItem.OrderByDescending(b => b.Recomendation); 
          break; 
        } 

        int pageSize = 3; 
        int pageNumber = (CounterForPage ?? 1); 
        var PageNumberResults = FullDatabaseItem.ToPagedList(pageNumber, pageSize); 
        ViewBag.PageNumberResults = FullDatabaseItem.Count(); 
        if (PageNumberResults.Any()) 
        { 

         return View(PageNumberResults); 
        } 

        return View("ErrorView"); 
       } 
      } 
     } 

あなたは私はこのコードを追加した見ることができるように:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection. 

今の問題は、コード行である:

FullDatabaseItem = FullDatabaseItem.Include (x => x.tblGame) 
         .Where (b => b.Score.ToUpper().Contains(DisplaySearchResults.ToUpper())); 

ゲーム名を取得しようとしているので、ユーザーが自分の検索を使用しているときに、ゲームの名前を入力するだけでレコードの購入を得ることができます。しかし、あなたが見るフィールドが検索されているのを見ることができます"Score"は、フィールドとして私は"GameName"が必要としないと言うので、そこでは動作しませんフィールドとしてtblReviewフィールドです。

私は私に尋ねると、私は

答えて

1

あなたのエンティティモデルが正しい、tblReviewからtblGameにナビゲーションプロパティを持つサンキュー提供するものとしてくださいあなたが必要とするより多くの情報を問題

を解決する上で助けを必要と?だから、あなたはこのようなものを持っていますか?

public class tblReview 
{ 
    public virtual tblGame tblGame { get; set; } 
    // other properties 
} 

この関係は双方向であるか単方向であるか?意味、あなたのtblGameクラスはこのようなtblReviewsコレクションプロパティを持っていますか?

public class tblGame 
{ 
    public virtual ICollection<tblReview> tblReviews { get; set; } 
    // other properties 
} 

もしそうなら、あなたは双方向の関連を持っていて、他のエンティティ内のフィールドから1つのエンティティ内のフィールドを検索することができます。

たとえば、特定の名前のゲームのレビューの一覧を表示するとします。あなたはそうのようなことを行うことができます。私はあなたが行うために、上に文字列を変換する必要はないと思う

var FullDatabaseItem = db.tblReviews.Include(g => g.tblGame); 
if (!string.IsNullOrEmpty(DisplaySearchResults)) 
{ 
    FullDatabaseItem = FullDatabaseItem 
     .Where(review => review.tblGame.GameName.Contains(DisplaySearchResults)); 
} 

:だから、最終的に

string gameName = "Pac-Man"; 
using (var db = new gamezoneDBEntities()) 
{ 
    // get reviews for game named pac-man 
    var reviews = db.tblReviews.Include(r => r.tblGame) 
     .Where(r => r.tblGame.GameName.Equals(gameName, 
      StringComparison.OrdinalIgnoreCase)); 

    // get game with reviews scored greater than 4 
    var games = db.tblGames.Include(g => g.tblReviews) 
     .Where(g => g.tblReviews.Any(r => r.Score > 4)); 
} 

、私はこれがあると思いますが後が何でありますか.Contains()を使用すると大文字と小文字を区別しない一致が検出されます。 「pAC-man」を検索すると、「Pac-Man」という名前のゲームが返されます。

+0

私はこの回答を受け取ったばかりです。私はそれを私にインパクトさせて、どんな結果が得られるか見てみます。結果のOUに警告するでしょう、答えをありがとう – user1319420

+0

ありがとうございますそれはうまくいきます:)あなたは私がこの年齢のためにされていると最高の仕事を:) – user1319420

関連する問題