2012-04-14 102 views
1

我是新来的,在这里已经很久了,我无法解决问题。我有下面的代码在我ShowAllReview控制器:用数据库的不同记录搜索可以搜索

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

,你可以看到我已经添加以下代码:随着出包括在审查表

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

认为会扔了以下错误:

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"这是tblReview字段,因为我需要的字段"GameName"在那里不起作用,因为它表示它不存在。

我需要帮助解决问题

任何您需要了解更多信息请咨询我,我应提供

谢谢

回答

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 
} 

如果是这样,那么你有一个双向关联,并且可以在一个实体从场中的其他实体搜索领域。

举例来说,您想显示具有特定名称的游戏的评论列表。你能做到这一点,像这样:

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

所以,最后,我想这是你所追求的:

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

我不认为你需要将字符串转换上为了做在使用.Contains()时不区分大小写。搜索“pAC-mAN”仍然应该返回名为“Pac-Man”的游戏。

+0

我刚刚收到这个答案会试图暗示它到我的,看看我得到什么结果。将提醒ou的结果,谢谢你的回答 – user1319420 2012-04-14 13:39:37

+0

非常感谢你的工作:)你最好的我一直在这个很长时间,并得到它的工作:) – user1319420 2012-04-14 13:51:37