2012-04-14 6 views
1

Ich bin neu hier und bin schon seit Ewigkeiten dabei und ich kann das Problem nicht lösen. Ich habe den folgenden Code in meinem ShowAllReview Controller:Kann mit einem anderen Datensatz einer Datenbank nicht suchen

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"); 
       } 
      } 
     } 

wie Sie mir diesen Code hinzugefügt habe, sehen können:

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

Mit aus dem Include auf der Bewertungen Tabelle würde die Ansicht die folgenden Fehler erbrechen :

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

das Problem ist jetzt mit dieser Codezeile:

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

Ich versuche, den Namen des Spiels zu bekommen, wenn der Benutzer meine Suche benutzt, kann er einen Rekord kaufen, indem er einfach den Namen des Spiels eintippt. Aber wie Sie sehen können, ist das Feld, das durchsucht wird, "Score", welches das Feld tblReview ist, da das Feld, das ich benötige, "GameName" nicht darin arbeitet, da es sagt, dass es nicht exsit.

Ich brauche Hilfe bei der Problemlösung

Gibt es weitere Informationen, die Sie benötigen fragen Sie mich bitte und ich werde

Danke

Antwort

1

Ihr Entitätsmodell eine Navigationseigenschaft von tblReview zu tblGame hat bieten, korrigieren ? Sie haben also eine Entität, die ungefähr so ​​aussieht?

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

Ist diese Beziehung bidirektional oder unidirektional? Bedeutet, hat Ihre TblGame-Klasse eine tblReviews-Auflistungseigenschaft wie folgt?

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

Wenn ja, dann haben Sie eine bidirektionale Assoziation, und Sie können Felder in einer Einheit von Feldern in der anderen Einheit suchen.

Sagen Sie zum Beispiel, Sie möchten eine Liste von Rezensionen für ein Spiel mit einem bestimmten Namen anzeigen. Sie können das tun, etwa so:

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

Also letztendlich, ich glaube, das ist, was Sie nach:

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

Das glaube ich nicht, dass Sie, um die Saiten zu oberen konvertieren müssen zu tun Bei der Verwendung von wird die Groß- und Kleinschreibung nicht berücksichtigt. Die Suche nach "pAC-mAN" sollte immer noch Spiele mit dem Namen "Pac-Man" zurückgeben.

+0

Ich habe gerade diese Antwort erhalten wird versuchen, es zu meinem zu implimentieren und zu sehen, was ich bekomme. Werde auf das Ergebnis aufmerksam, danke für die Antwort – user1319420

+0

Vielen Dank, es funktioniert :) Ihr Bestes, ich bin schon seit Ewigkeiten hier und habe es funktioniert :) – user1319420

Verwandte Themen