2012-04-14 1 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"); 
       } 
      } 
     } 

당신은 내가이 코드를 추가 한 볼 수 :

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

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

이제 문제는이 코드 라인이다

게임 이름을 얻으 려하므로 사용자가 내 검색을 사용할 때 게임 이름 만 입력하면 레코드 구매를 얻을 수 있습니다. 하지만 당신이 볼 수 있듯이 검색되는 필드가 "GameName"이 필요하지 않은 필드로 tblReview 필드 인 "Score"이 있습니다.

나는 문제

에게 필요한 모든 자세한 정보 해결에 도움을 필요로 나 한테 물어와 나는

당신에게 감사 제공해야 바랍니다

답변

1

엔터티 모델 tblGame에 tblReview에서 탐색 속성이 올바른 ? 그래서 당신은 이런 모습의 실체를 가지고 있습니까?

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

이 관계는 양방향입니까? 단방향입니까? 의미, tblGame 클래스 tblReviews 컬렉션 속성이 같은 있습니까?

그렇다면 양방향 연관성이 있으며 다른 엔티티의 필드에서 한 엔티티의 필드를 검색 할 수 있습니다.

예를 들어 특정 이름의 게임에 대한 리뷰 목록을 표시하려고한다고 가정 해보십시오. 당신은 너무 같은 것을 할 수있다 : 나는 당신이하기 위해 상단에 문자열을 변환 할 필요가 있다고 생각하지 않습니다

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

정말 고마워요. :) ur 가장 좋은 시간은 이것이었습니다. – user1319420